From 89826caf2736cbfa242cc95110f3967ef282f3ec Mon Sep 17 00:00:00 2001
From: bicijinlian <bicijinlian@163.com>
Date: Wed, 21 Dec 2022 12:18:29 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A=E9=85=8D=E7=BD=AE?=
 =?UTF-8?q?=E8=8A=82=E5=90=8D=E7=A7=B0=E4=B9=A6=E5=86=99=E9=94=99=E8=AF=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Configs/appsettings.custom.json           |  2 +-
 .../Configs/appsettings.development.json      |  2 +-
 OptionStudy.Next/Configs/appsettings.json     |  2 +-
 .../Configs/appsettings.product.json          |  2 +-
 .../Configs/appsettings.custom.json           |  2 +-
 .../Configs/appsettings.development.json      |  2 +-
 OptionStudy.UnitApp/Configs/appsettings.json  |  2 +-
 .../Configs/appsettings.product.json          |  2 +-
 .../DynamicLoadConfigFileTest.cs              |  4 +--
 OptionStudy.UnitApp/LoadConfigFileTest.cs     |  4 +--
 .../2选项模型/OptionsFactoryTest.cs       | 33 +++++++++++++++++++
 .../Configs/appsettings.custom.json           |  2 +-
 .../Configs/appsettings.development.json      |  2 +-
 .../Configs/appsettings.json                  |  2 +-
 .../Configs/appsettings.product.json          |  2 +-
 .../OptionsPattern.Sutdy.Advanced.csproj      |  4 +++
 OptionsPattern.Sutdy.Advanced/Startup.cs      | 28 ++++------------
 OptionsPattern.Sutdy.Advanced/UseXunitTest.cs | 25 +++++++++++++-
 .../appsettings.json                          |  2 +-
 .../Configs/appsettings.custom.json           |  2 +-
 .../Configs/appsettings.development.json      |  2 +-
 .../Configs/appsettings.json                  |  2 +-
 .../Configs/appsettings.product.json          |  2 +-
 .../OptionsPatternTest.cs                     |  2 +-
 框架揭秘.sln                              |  7 ++--
 25 files changed, 93 insertions(+), 48 deletions(-)
 create mode 100644 OptionsPattern.Sutdy.Advanced/2选项模型/OptionsFactoryTest.cs

diff --git a/OptionStudy.Next/Configs/appsettings.custom.json b/OptionStudy.Next/Configs/appsettings.custom.json
index 1cb9db7..ded94f9 100644
--- a/OptionStudy.Next/Configs/appsettings.custom.json
+++ b/OptionStudy.Next/Configs/appsettings.custom.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "customAppNmae",
+  "AppName": "customAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "custom@163.com",
diff --git a/OptionStudy.Next/Configs/appsettings.development.json b/OptionStudy.Next/Configs/appsettings.development.json
index fd26658..4fe7294 100644
--- a/OptionStudy.Next/Configs/appsettings.development.json
+++ b/OptionStudy.Next/Configs/appsettings.development.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "developmentAppNmae",
+  "AppName": "developmentAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "development@163.com",
diff --git a/OptionStudy.Next/Configs/appsettings.json b/OptionStudy.Next/Configs/appsettings.json
index 3b859c1..caff2d8 100644
--- a/OptionStudy.Next/Configs/appsettings.json
+++ b/OptionStudy.Next/Configs/appsettings.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "JsonAppNmae",
+  "AppName": "JsonAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "json@163.com",
diff --git a/OptionStudy.Next/Configs/appsettings.product.json b/OptionStudy.Next/Configs/appsettings.product.json
index 48639b5..8ceca6e 100644
--- a/OptionStudy.Next/Configs/appsettings.product.json
+++ b/OptionStudy.Next/Configs/appsettings.product.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "productAppNmae",
+  "AppName": "productAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "product@163.com",
diff --git a/OptionStudy.UnitApp/Configs/appsettings.custom.json b/OptionStudy.UnitApp/Configs/appsettings.custom.json
index 1cb9db7..ded94f9 100644
--- a/OptionStudy.UnitApp/Configs/appsettings.custom.json
+++ b/OptionStudy.UnitApp/Configs/appsettings.custom.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "customAppNmae",
+  "AppName": "customAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "custom@163.com",
diff --git a/OptionStudy.UnitApp/Configs/appsettings.development.json b/OptionStudy.UnitApp/Configs/appsettings.development.json
index fd26658..4fe7294 100644
--- a/OptionStudy.UnitApp/Configs/appsettings.development.json
+++ b/OptionStudy.UnitApp/Configs/appsettings.development.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "developmentAppNmae",
+  "AppName": "developmentAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "development@163.com",
diff --git a/OptionStudy.UnitApp/Configs/appsettings.json b/OptionStudy.UnitApp/Configs/appsettings.json
index 3b859c1..caff2d8 100644
--- a/OptionStudy.UnitApp/Configs/appsettings.json
+++ b/OptionStudy.UnitApp/Configs/appsettings.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "JsonAppNmae",
+  "AppName": "JsonAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "json@163.com",
diff --git a/OptionStudy.UnitApp/Configs/appsettings.product.json b/OptionStudy.UnitApp/Configs/appsettings.product.json
index 48639b5..8ceca6e 100644
--- a/OptionStudy.UnitApp/Configs/appsettings.product.json
+++ b/OptionStudy.UnitApp/Configs/appsettings.product.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "productAppNmae",
+  "AppName": "productAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "product@163.com",
diff --git a/OptionStudy.UnitApp/DynamicLoadConfigFileTest.cs b/OptionStudy.UnitApp/DynamicLoadConfigFileTest.cs
index 13eed5f..5fde583 100644
--- a/OptionStudy.UnitApp/DynamicLoadConfigFileTest.cs
+++ b/OptionStudy.UnitApp/DynamicLoadConfigFileTest.cs
@@ -32,7 +32,7 @@ namespace OptionStudy.UnitApp
 
             //断言
             Assert.NotNull(appOption);
-            Assert.Equal($"{env}AppNmae", appOption.AppName);
+            Assert.Equal($"{env}AppName", appOption.AppName);
             Assert.Equal("0.0.0.1", appOption.AppVersion);
 
             //子配置节:父配置对象的属性名必须和配置KEY保持一致,否则不能自动绑定。
@@ -79,7 +79,7 @@ namespace OptionStudy.UnitApp
 
             //断言
             Assert.NotNull(appOption);
-            Assert.Equal($"{envValue}AppNmae", appOption.AppName);
+            Assert.Equal($"{envValue}AppName", appOption.AppName);
             Assert.Equal("0.0.0.1", appOption.AppVersion);
 
             //子配置节:父配置对象的属性名必须和配置KEY保持一致,否则不能自动绑定。
diff --git a/OptionStudy.UnitApp/LoadConfigFileTest.cs b/OptionStudy.UnitApp/LoadConfigFileTest.cs
index 326bf61..58e647c 100644
--- a/OptionStudy.UnitApp/LoadConfigFileTest.cs
+++ b/OptionStudy.UnitApp/LoadConfigFileTest.cs
@@ -35,7 +35,7 @@ namespace OptionStudy.UnitApp
 
             //断言
             Assert.NotNull(appOption);
-            Assert.Equal("JsonAppNmae", appOption.AppName);
+            Assert.Equal("JsonAppName", appOption.AppName);
             Assert.Equal("0.0.0.1", appOption.AppVersion);
 
             //子配置节:父配置对象的属性名必须和配置KEY保持一致,否则不能自动绑定。
@@ -63,7 +63,7 @@ namespace OptionStudy.UnitApp
 
             //断言
             Assert.NotNull(appOption);
-            Assert.Equal("JsonAppNmae", appOption.AppName);
+            Assert.Equal("JsonAppName", appOption.AppName);
             Assert.Equal("0.0.0.1", appOption.AppVersion);
 
             //子配置节:父配置对象的属性名必须和配置KEY保持一致,否则不能自动绑定。
diff --git a/OptionsPattern.Sutdy.Advanced/2选项模型/OptionsFactoryTest.cs b/OptionsPattern.Sutdy.Advanced/2选项模型/OptionsFactoryTest.cs
new file mode 100644
index 0000000..5a8cc03
--- /dev/null
+++ b/OptionsPattern.Sutdy.Advanced/2选项模型/OptionsFactoryTest.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using Xunit;
+
+namespace OptionsPattern.Sutdy.Advanced
+{
+    public class OptionsFactoryTest : IDisposable
+    {
+         private readonly ITestOutputHelper? _output;
+        public OptionsFactoryTest(ITestOutputHelperAccessor outputHelperAccessor) 
+        {
+            if (outputHelperAccessor == null)
+            {
+                throw new ArgumentNullException(nameof(outputHelperAccessor));
+            }
+            _output = outputHelperAccessor.Output;
+        }
+
+        [Fact]
+        public void Test()
+        {
+        }
+
+        public void Dispose()
+        {
+            
+        }
+    }
+}
diff --git a/OptionsPattern.Sutdy.Advanced/Configs/appsettings.custom.json b/OptionsPattern.Sutdy.Advanced/Configs/appsettings.custom.json
index 1cb9db7..ded94f9 100644
--- a/OptionsPattern.Sutdy.Advanced/Configs/appsettings.custom.json
+++ b/OptionsPattern.Sutdy.Advanced/Configs/appsettings.custom.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "customAppNmae",
+  "AppName": "customAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "custom@163.com",
diff --git a/OptionsPattern.Sutdy.Advanced/Configs/appsettings.development.json b/OptionsPattern.Sutdy.Advanced/Configs/appsettings.development.json
index fd26658..4fe7294 100644
--- a/OptionsPattern.Sutdy.Advanced/Configs/appsettings.development.json
+++ b/OptionsPattern.Sutdy.Advanced/Configs/appsettings.development.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "developmentAppNmae",
+  "AppName": "developmentAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "development@163.com",
diff --git a/OptionsPattern.Sutdy.Advanced/Configs/appsettings.json b/OptionsPattern.Sutdy.Advanced/Configs/appsettings.json
index 3b859c1..caff2d8 100644
--- a/OptionsPattern.Sutdy.Advanced/Configs/appsettings.json
+++ b/OptionsPattern.Sutdy.Advanced/Configs/appsettings.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "JsonAppNmae",
+  "AppName": "JsonAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "json@163.com",
diff --git a/OptionsPattern.Sutdy.Advanced/Configs/appsettings.product.json b/OptionsPattern.Sutdy.Advanced/Configs/appsettings.product.json
index 48639b5..8ceca6e 100644
--- a/OptionsPattern.Sutdy.Advanced/Configs/appsettings.product.json
+++ b/OptionsPattern.Sutdy.Advanced/Configs/appsettings.product.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "productAppNmae",
+  "AppName": "productAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "product@163.com",
diff --git a/OptionsPattern.Sutdy.Advanced/OptionsPattern.Sutdy.Advanced.csproj b/OptionsPattern.Sutdy.Advanced/OptionsPattern.Sutdy.Advanced.csproj
index 536ed7f..f1cc855 100644
--- a/OptionsPattern.Sutdy.Advanced/OptionsPattern.Sutdy.Advanced.csproj
+++ b/OptionsPattern.Sutdy.Advanced/OptionsPattern.Sutdy.Advanced.csproj
@@ -61,4 +61,8 @@
     </None>
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="3依赖注入\" />
+  </ItemGroup>
+
 </Project>
diff --git a/OptionsPattern.Sutdy.Advanced/Startup.cs b/OptionsPattern.Sutdy.Advanced/Startup.cs
index e210f35..67c0108 100644
--- a/OptionsPattern.Sutdy.Advanced/Startup.cs
+++ b/OptionsPattern.Sutdy.Advanced/Startup.cs
@@ -19,12 +19,6 @@ namespace OptionsPattern.Sutdy.Advanced
 {
     public class Startup
     {
-        //生成主机方法
-        //public IHostBuilder CreateHostBuilder() 
-        //{ 
-
-        //}
-
         /// <summary>
         /// 配置主机方法
         /// 内部可以配置 IConfiguration
@@ -40,25 +34,15 @@ namespace OptionsPattern.Sutdy.Advanced
             //设置应用配置
             hostBuilder.ConfigureAppConfiguration((context, builder) =>
             {
-
+                builder
+                .AddEnvironmentVariables()
+                .AddJsonFile("Configs/appsettings.json",false,true)
+                .AddJsonFile($"Configs/appsettings.{context.HostingEnvironment.EnvironmentName}.json",true,true)
+                .Build()
+                ;
             });
-
-            //集成 Opentelemetry
-            //var tracerProvider = Sdk.CreateTracerProviderBuilder()
-            //    .AddSource("Xunit.DependencyInjection")
-            //    .AddConsoleExporter();
-
         }
 
-        /// <summary>
-        /// 配置服务方法
-        /// (不支持重载)
-        /// </summary>
-        //public void ConfigureServices(IServiceCollection services)
-        //{
-
-        //}
-
         /// <summary>
         /// 配置服务方法
         /// 注入或用途 IConfiguration IHostEnvironment 请使用  context.xx;
diff --git a/OptionsPattern.Sutdy.Advanced/UseXunitTest.cs b/OptionsPattern.Sutdy.Advanced/UseXunitTest.cs
index 810e219..3922469 100644
--- a/OptionsPattern.Sutdy.Advanced/UseXunitTest.cs
+++ b/OptionsPattern.Sutdy.Advanced/UseXunitTest.cs
@@ -3,13 +3,21 @@ namespace OptionsPattern.Sutdy.Advanced
     public class UseXunitTest:IDisposable
     {
         private readonly ITestOutputHelper? _output;
-        public UseXunitTest(ITestOutputHelperAccessor outputHelperAccessor)
+        private readonly IConfiguration _defaultConfig;
+        public UseXunitTest(ITestOutputHelperAccessor outputHelperAccessor,IConfiguration configuration)
         {
             if (outputHelperAccessor == null)
             {
                 throw new ArgumentNullException(nameof(outputHelperAccessor));
             }
+
+            if (outputHelperAccessor == null)
+            {
+                throw new ArgumentNullException($"���� {nameof(outputHelperAccessor)} Ϊ null, ���� Startup.cs ��ע�� IConfiguration");
+            }
+
             _output = outputHelperAccessor.Output;
+            _defaultConfig = configuration;
         }
 
         
@@ -23,6 +31,21 @@ namespace OptionsPattern.Sutdy.Advanced
             _output?.WriteLine("6.2 ����ѡ�� ���ף�");
         }
 
+        /// <summary>
+        ///  ��IoC�л�ȡĬ������
+        ///  1������ Xunit.DependencyInjection ��
+        ///  2��Startup.cs ������Ĭ������
+        /// </summary>
+        [Fact]
+        public void GetIConfiguration_FromDI_ByStartup_Test()
+        {
+            var appOption = _defaultConfig.Get<AppOption>();
+
+            Assert.NotNull(_defaultConfig);
+            Assert.NotNull(appOption);
+            Assert.Contains(nameof(AppOption.AppName), appOption.AppName);
+        }
+
         /// <summary>
         /// ���Բ������쳣
         /// ʹ�ã�xUnit ��ͨ����
diff --git a/OptionsPattern.Sutdy.Experience.ConsoleApp/appsettings.json b/OptionsPattern.Sutdy.Experience.ConsoleApp/appsettings.json
index 3b859c1..caff2d8 100644
--- a/OptionsPattern.Sutdy.Experience.ConsoleApp/appsettings.json
+++ b/OptionsPattern.Sutdy.Experience.ConsoleApp/appsettings.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "JsonAppNmae",
+  "AppName": "JsonAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "json@163.com",
diff --git a/OptionsPattern.Sutdy.Experience/Configs/appsettings.custom.json b/OptionsPattern.Sutdy.Experience/Configs/appsettings.custom.json
index 1cb9db7..ded94f9 100644
--- a/OptionsPattern.Sutdy.Experience/Configs/appsettings.custom.json
+++ b/OptionsPattern.Sutdy.Experience/Configs/appsettings.custom.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "customAppNmae",
+  "AppName": "customAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "custom@163.com",
diff --git a/OptionsPattern.Sutdy.Experience/Configs/appsettings.development.json b/OptionsPattern.Sutdy.Experience/Configs/appsettings.development.json
index fd26658..4fe7294 100644
--- a/OptionsPattern.Sutdy.Experience/Configs/appsettings.development.json
+++ b/OptionsPattern.Sutdy.Experience/Configs/appsettings.development.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "developmentAppNmae",
+  "AppName": "developmentAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "development@163.com",
diff --git a/OptionsPattern.Sutdy.Experience/Configs/appsettings.json b/OptionsPattern.Sutdy.Experience/Configs/appsettings.json
index 3b859c1..caff2d8 100644
--- a/OptionsPattern.Sutdy.Experience/Configs/appsettings.json
+++ b/OptionsPattern.Sutdy.Experience/Configs/appsettings.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "JsonAppNmae",
+  "AppName": "JsonAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "json@163.com",
diff --git a/OptionsPattern.Sutdy.Experience/Configs/appsettings.product.json b/OptionsPattern.Sutdy.Experience/Configs/appsettings.product.json
index 48639b5..8ceca6e 100644
--- a/OptionsPattern.Sutdy.Experience/Configs/appsettings.product.json
+++ b/OptionsPattern.Sutdy.Experience/Configs/appsettings.product.json
@@ -1,5 +1,5 @@
 {
-  "AppName": "productAppNmae",
+  "AppName": "productAppName",
   "AppVersion": "0.0.0.1",
   "EMail": {
     "ReceiveAddress": "product@163.com",
diff --git a/OptionsPattern.Sutdy.Experience/OptionsPatternTest.cs b/OptionsPattern.Sutdy.Experience/OptionsPatternTest.cs
index d6dabe5..36071d1 100644
--- a/OptionsPattern.Sutdy.Experience/OptionsPatternTest.cs
+++ b/OptionsPattern.Sutdy.Experience/OptionsPatternTest.cs
@@ -40,7 +40,7 @@ namespace OptionsPattern.Sutdy.Experience
             Assert.NotNull(configuration);
             Assert.NotNull(appOption);
 
-            Assert.Equal("JsonAppNmae", appOption.AppName);
+            Assert.Equal("JsonAppName", appOption.AppName);
             Assert.Equal(new Version(0,0,0,1), appOption.AppVersion);
             Assert.Equal("json@163.com", appOption.EMail?.ReceiveAddress);
             Assert.Equal("json", appOption.EMail?.Recipient);
diff --git a/框架揭秘.sln b/框架揭秘.sln
index 30c08e8..19644d0 100644
--- a/框架揭秘.sln
+++ b/框架揭秘.sln
@@ -37,11 +37,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OptionStudy.UnitApp", "Opti
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OptionStudy.Next", "OptionStudy.Next\OptionStudy.Next.csproj", "{559F6F82-A440-4D85-9F04-01CE26B1A6E6}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OptionsPattern.Sutdy.Experience", "OptionsPattern.Sutdy.Experience\OptionsPattern.Sutdy.Experience.csproj", "{9C73DFBD-E1BC-4B27-84AA-35848088D888}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OptionsPattern.Sutdy.Experience", "OptionsPattern.Sutdy.Experience\OptionsPattern.Sutdy.Experience.csproj", "{9C73DFBD-E1BC-4B27-84AA-35848088D888}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OptionsPattern.Sutdy.Experience.ConsoleApp", "OptionsPattern.Sutdy.Experience.ConsoleApp\OptionsPattern.Sutdy.Experience.ConsoleApp.csproj", "{703D8C74-2B39-470B-9108-A36FF8263FAE}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OptionsPattern.Sutdy.Experience.ConsoleApp", "OptionsPattern.Sutdy.Experience.ConsoleApp\OptionsPattern.Sutdy.Experience.ConsoleApp.csproj", "{703D8C74-2B39-470B-9108-A36FF8263FAE}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OptionsPattern.Sutdy.AdvancedAdvanced", "OptionsPattern.Sutdy.Advanced\OptionsPattern.Sutdy.Advanced.csproj", "{D5744BA1-4D24-4D4D-A479-2293DEB7A8CF}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OptionsPattern.Sutdy.Advanced", "OptionsPattern.Sutdy.Advanced\OptionsPattern.Sutdy.Advanced.csproj", "{D5744BA1-4D24-4D4D-A479-2293DEB7A8CF}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -74,6 +74,7 @@ Global
 		HideSolutionNode = FALSE
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
+		{E9FE0FBE-0E22-4C3D-ACF3-7538EDA1FB2A} = {8684FFF4-D613-45AE-8CBF-D6370CB034C3}
 		{FA9BF369-7571-4A25-A1B4-AB69088BDE3C} = {97685B5C-8532-48B0-A813-3CC629F31FD3}
 		{4892AF59-813D-4957-9ADC-72871AC58C68} = {97685B5C-8532-48B0-A813-3CC629F31FD3}
 		{E3F8F3F8-F4A9-42EA-8AA5-862B0754A1B3} = {6F45CE67-FAA8-4FF8-87C9-E8752B0734BF}