0

私は次の例(アグレッシブオールドモード)に従っていました:

http://docs.castleproject.org/Default.aspx?Page=Startable-Facility&NS=Windsor&AspxAutoDetectCookieSupport=1

これが私の完全なソースコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using Castle.Facilities.Startable;
using Castle.MicroKernel;
using Castle.MicroKernel.Registration;

namespace Test
{
    public interface IStartable
    {
        void Start();
        void Stop();
    }

    public class Startable : IStartable
    {
        public Startable()
        {
            Console.WriteLine("Created!");
        }

        public void Start()
        {
            Console.WriteLine("Started!");
        }

        public void Stop()
        {
            Console.WriteLine("Stopped!");
        }
    }

    [TestFixture]
    public class StartableFacilityContainerTest
    {

        [Test]
        public void TestOperation()
        {
            IKernel container = new DefaultKernel();

            container.AddFacility<StartableFacility>();

            container.Register(Component.For<Startable>());
            Console.WriteLine("Registered!");

            container.Dispose();
            Console.WriteLine("Released!");
        }
    }
}

ただし、実行すると、次のようになります。

Registered!
Released!

私が(例で与えられているように)得ることを期待するとき:

Created!
Started!
Registered!
Stopped!
Released!

基本的に私のStartableは起動しませんでした。

これは、.Net4.0およびCastleWindsor3.0でテストされています

私は何を間違えましたか?

4

3 に答える 3

4

インストーラーを使用しています。これは私を助けました:

container.AddFacility<StartableFacility>(f => f.DeferredTryStart());
于 2014-04-29T14:35:11.217 に答える
0

試す

container.Register(Component.For<Startable>()
     .StartUsingMethod(s => s.Start)
     .StopUsingMethod(s => s.Stop);
于 2012-11-22T16:02:32.107 に答える
0

問題はIStartable、単に実装するのではなく、独自のインターフェイスを作成して実装したことですCastle.Core.IStartable

于 2017-02-08T14:16:40.200 に答える