如何注册使用温莎容器类的单独的实例 [英] How to register separate instance of a class using Windsor Container

查看:181
本文介绍了如何注册使用温莎容器类的单独的实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

不是很熟悉温莎集装箱,由其他人编写修改代码。我们有代码,在初始化所有WindsorContainer对象有PgDataAccess(自己的类)数据类型属性



 公共PgDataAccess DA {搞定;组; } 



代码如下:

  _windsorContainer.Register(Component.For< PgDataAccess>()UsingFactoryMethod(()=> 
{
VAR数据访问=新PgDataAccess();
dataAccess.ConnectionString =的connectionString;
返回数据访问;
}));



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

 的foreach(分量_windsorContainer.Components< PgDataAccess>())
{
VAR数据访问=新PgDataAccess();
dataAccess.ConnectionString =的connectionString;
component.da =数据访问;
}


解决方案

在PgDataAccess的代码生活方式是单身,因为辛格尔顿是默认的生活方式,如果您不指定任何明确将用于



所以,你的代码是类似于

  _windsorContainer.Register(Component.For< PgDataAccess>()
.LifestyleSingleton()
.UsingFactoryMethod(()= >
{
VAR数据访问=新PgDataAccess();
dataAccess.ConnectionString =的connectionString;
返回数据访问;
}));

如果你想有PgDataAccess的新实例依赖于它的每个组件,您应该注册它。瞬态

  _windsorContainer.Register(Component.For< PgDataAccess>()
.LifestyleTransient()
.UsingFactoryMethod(()=>
{
VAR数据访问=新PgDataAccess();
dataAccess.ConnectionString =的connectionString;
返回数据访问;
})) ;

您可以阅读有关生活方式的详细信息的这里


Not very familiar with Windsor Container, modifying code written by other person. We have code which initializes all objects in WindsorContainer which has PgDataAccess (own class) data type property

public PgDataAccess da { get; set; }

Code is the following:

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

According to some errors seems we had same PgDataAccess class instance is used for all the objects in this container. How to modify this initialization to register separate PgDataAccess class instance in every container's object? Something with following meaning:

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

解决方案

In your code lifestyle of PgDataAccess is singleton, since "Singleton is the default lifestyle, which will be used if you don't specify anyone explicitly"

So, your code is similar to

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

If you want to have new instance of PgDataAccess for each component that depends on it, you should register it as transient.

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

You can read more information about lifestyles here.

这篇关于如何注册使用温莎容器类的单独的实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆