0

我已经尝试过温莎的共享生活方式。
假设我希望多个 CustomerTasks 与 ILogger 池一起工作。
当我尝试解决的次数超过 maxPoolSize 时,会不断创建新的记录器。

我错过了什么,最大池大小的确切含义是什么?

我使用的 xml 配置是(演示代码):

<component id="customertasks" type="WindsorTest.CustomerTasks, WindsorTestCheck" lifestyle="transient" />
<component id="logger.console" service="WindsorTest.ILogger, WindsorTestCheck" type="WindsorTest.ConsoleLogger, WindsorTestCheck" lifestyle="pooled" initialPoolSize="2" maxPoolSize="5" />

代码是:

public interface ILogger
{
    void Log(string message);
}

public class ConsoleLogger : ILogger
{
    private static int count = 0;
    public ConsoleLogger()
    {
        Console.WriteLine("Hello from constructor number:" + count);
        count++;
    }

    public void Log(string message)
    {
        Console.WriteLine(message);
    }
}

public class CustomerTasks
{
    private readonly ILogger logger;

    public CustomerTasks(ILogger logger)
    {
        this.logger = logger;
    }
    public void SaveCustomer()
    {
        logger.Log("Saved customer");
    }
}
4

1 回答 1

1

我在 dotnetslackers 中找到了这篇文章,它为我解决了很多问题。
maxPoolSize是释放时将返回到池中的最大实例数。后续版本将导致对象被丢弃。

我注意到的一个不准确之处是initialPoolSize是第一次解析时创建的实例数,而不是文章声称的容器创建数(可能是由于编写后的版本更改)

于 2010-05-03T16:16:51.567 回答