gpt4 book ai didi

c# - 以编程方式更新容器内的配置

转载 作者:太空宇宙 更新时间:2023-11-03 19:28:31 25 4
gpt4 key购买 nike

在我的应用程序中,我询问用户他们想要连接到哪个数据库,然后我将其写回 EL5.0,如下所示:

    var builder = new ConfigurationSourceBuilder();

builder.ConfigureData()
.ForDatabaseNamed("UserDatabase")
.ThatIs.ASqlDatabase()
.WithConnectionString(sqlConnectionStringBuilder.ConnectionString)
.AsDefault();

var configSource = new DictionaryConfigurationSource();
builder.UpdateConfigurationWithReplace(configSource);
EnterpriseLibraryContainer.Current
= EnterpriseLibraryContainer.CreateDefaultContainer(configSource);

每当我这样调用 GetInstance 时都会使用它:

    TestSQLConnection testSQLConnection = 
EnterpriseLibraryContainer.Current.GetInstance<TestSQLConnection>();

现在我正尝试在我的程序主类中使用 Unity

    [STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

IUnityContainer unityContainer = new UnityContainer().AddNewExtension<EnterpriseLibraryCoreExtension>();
Application.Run(unityContainer.Resolve<MainForm>());
}

我使用 unityContainer,它是 MainForm 的依赖之一,而不是 GetInstance():

    TestSQLConnection testSQLConnection = unityContainer.Resolve<TestSQLConnection>(); 

但这并没有使用更新后的配置。

如何像处理 EL 静态类一样在 Unity 中合并更新的配置?

最佳答案

unityContainer 是如何传递到 MainForm 的?看起来你正在用另一个容器解析一个容器,因为你在创建一个新的 UnityContainer 之后像这样解析 MainForm:

Application.Run(unityContainer.Resolve<MainForm>());

. . .然后你说 unityContainer 是 MainForm 的依赖项。

在我看来,您至少有两个,可能三个不同的容器实例。您能否在所有情况下都简单地使用 EnterpriseLibraryContainer.Current?

顺便说一句,在大多数情况下,您不想将容器传递到您的实现中直接从您的实现中调用Resolve()。这是Service Locator Anti-Pattern .

关于c# - 以编程方式更新容器内的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6733630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com