如何使用温莎容器注册类的单独实例
本文关键字:单独 实例 注册 何使用 | 更新日期: 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;
}));
您可以在此处阅读有关生活方式的更多信息。