1

我想NServiceBus使用Castle.Windsor容器提供的记录器,而不是自己直接提供。有没有办法做到这一点?以下不能作为启动时引发的异常。

public class EndPointConfig : IConfigureThisEndpoint, IWantCustomInitialization, IWantCustomLogging
{
    private ILogger _logger = NullLogger.Instance;
    public ILogger Logger
    {
        get { return _logger; }
        set { _logger = value; }
    }


    public void Init()
    {
        SetLoggingLibrary.Log4Net(null, Logger);
        Configure.With()
            .CastleWindsorBuilder(Host.Init.CreateSubsystems())
            .RunTimeoutManager()
            .UseNHibernateTimeoutPersister();
    }
}

Host.Init.CreateSubsystems()返回一个Castle.Windsor带有注册记录器的容器。

4

1 回答 1

1

如果您提供了一个容器,并且已经使用注册到 CastleWindsorBuilder 的 ILogger 进行引导,则无需执行任何其他操作:NServiceBus 将根据 log4net 配置使用您的记录器设置(根据容器中的记录器注册,在单独的文件或 app.config 中)

SetLoggingLibrary.Log4Net(null, Logger); 不需要。

public class MessageEndpoint : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
    public void Init()
    {
        var container = new WindsorContainer();
        var installerFactory = new MyInstallerFactory();
        container.Install(FromAssembly.This(installerFactory));

        var logger = container.Resolve<ILogger>();
        logger.Debug("Container bootstrapped");

        Configure.With()
                 .DisableTimeoutManager()
                 .CastleWindsorBuilder(container)
                 .JsonSerializer();

        logger.Debug("Bus configured");
    }
}
于 2013-04-10T13:06:50.247 回答