如何使用温莎容器注册类的单独实例

本文关键字:单独 实例 注册 何使用 | 更新日期: 2023-09-27 18:34:53

不太熟悉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 的新实例,则应将其注册为瞬态。

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

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

相关文章: