我遵循了中给出的示例(侵略性旧模式):
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没有启动。
这在.Net 4.0和Castle Windsor 3.0中进行了测试
我做错什么了?
发布于 2012-11-23 00:02:32
试一试
container.Register(Component.For<Startable>()
.StartUsingMethod(s => s.Start)
.StopUsingMethod(s => s.Stop);发布于 2014-04-29 22:35:11
我使用的是安装程序。这对我很有帮助:
container.AddFacility<StartableFacility>(f => f.DeferredTryStart());发布于 2017-02-08 22:16:40
问题是您已经创建并实现了自己的IStartable接口,而不仅仅是实现了Castle.Core.IStartable
https://stackoverflow.com/questions/13516218
复制相似问题