3

对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;
}
4

1 回答 1

4

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

因此,您的代码类似于

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

如果您想为依赖它的每个组件创建新的 PgDataAccess 实例,则应将其注册为瞬态。

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

您可以在此处阅读有关生活方式的更多信息。

于 2013-10-12T12:46:21.747 回答