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, ロガー); 必要ありません。

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 に答える