gpt4 book ai didi

c# - 如何使用 Windsor 容器注册一个类的单独实例

转载 作者:行者123 更新时间:2023-11-30 15:32:18 25 4
gpt4 key购买 nike

对Windsor Container不是很熟悉,修改别人写的代码。我们有代码初始化 WindsorContainer 中的所有对象,这些对象具有 PgDataAccess(自己的类)数据类型属性

public PgDataAccess da { get; set; }

代码如下:

    _windsorContainer.Register(Component.For<PgDataAccess>().UsingFactoryMethod(() =>
{
var dataAccess = new PgDataAccess();
dataAccess.ConnectionString = connectionString;
return dataAccess;
}));

根据一些错误,我们似乎有相同的 PgDataAccess 类实例用于此容器中的所有对象。如何修改此初始化以在每个容器的对象中注册单独的 PgDataAccess 类实例?具有以下含义的东西:

foreach(component in _windsorContainer.Components.<PgDataAccess>())
{
var dataAccess = new PgDataAccess();
dataAccess.ConnectionString = connectionString;
component.da = dataAccess;
}

最佳答案

在您的代码中,PgDataAccess 的生活方式是单例,因为“单例是默认的生活方式,如果您没有明确指定任何人,它将被使用”

所以,你的代码类似于

_windsorContainer.Register(Component.For<PgDataAccess>()
.LifestyleSingleton()
.UsingFactoryMethod(() =>
{
var dataAccess = new PgDataAccess();
dataAccess.ConnectionString = connectionString;
return dataAccess;
}));

如果您希望每个依赖它的组件都有新的 PgDataAccess 实例,您应该将其注册为 transient 。

_windsorContainer.Register(Component.For<PgDataAccess>()
.LifestyleTransient()
.UsingFactoryMethod(() =>
{
var dataAccess = new PgDataAccess();
dataAccess.ConnectionString = connectionString;
return dataAccess;
}));

您可以阅读更多关于生活方式的信息here .

关于c# - 如何使用 Windsor 容器注册一个类的单独实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19324033/

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