【问题标题】:Castle Windsor resolve named instance and unnamed instance incorrectCastle Windsor 解析命名实例和未命名实例不正确
【发布时间】:2010-11-20 10:24:09
【问题描述】:

我有以下测试代码试图获取一个用于通用实例和另一个用于特殊用途的实例。

[TestMethod]
public void Test_Name_And_Named_Instances()
{
//MyClass implemented IMyClass
MyClass genericInstance = new MyClass("generic");
MyClass specialInstance = new MyClass("special");

IWindsorContainer container = new WindsorContainer();
container.Register(Component.For(IMyClass).Instance(genericInstance));
container.Register(Component.For(IMyClass).Instance(specialInstance).Named("special"));

IMyClass genericOne = container.Resolve<IMyClass>();
IMyClass specialOne = container.Resolve<IMyClass>("special");

Assert.AreSame(genericOne, genericInstance); //true
Assert.AreNotSame(genericOne, specialOne); //false
}

我希望得到两个不同的实例,但结果是 genericOne 和 specialOne 都指向同一个对象 genericInstance。

有什么想法吗?

【问题讨论】:

    标签: castle-windsor


    【解决方案1】:

    这不能编译:

    container.Register(Component.For(IMyClass).Instance(genericInstance));
    

    应该是:

    container.Register(Component.For<IMyClass>().Instance(genericInstance));
    

    除此之外,the test passes for me (Windsor 2.5.2)

    编辑:

    如果您翻转注册,则测试失败。这是设计使然。当您在没有明确名称的情况下解析时,您是在说“给我这个服务的默认组件”,默认情况下,在 Windsor 中,它是该服务类型的第一个注册组件。

    如果您需要同一服务类型下的不同组件,请在注册和解析时为所有组件分配明确的名称。

    【讨论】:

    • 我的错误。发布的代码与实际测试代码几乎没有变化。 container.Register(Component.For(IMyClass).Instance(genericInstance));应该是 container.Register(Component.For(typeof(IMyClass)).Instance(genericInstance)); IMyClass specialOne = container.Resolve("special");是 IMyClass specialOne = container.Resolve(typeof(IMyClass),"special");我发现最后一个 Resolve 导致了我的问题。应该是 IMyClass specialOne = container.Resolve("special",typeof(IMyClass));编译器没有给我错误。很抱歉打扰大家。
    • 我需要自己开枪。原始测试有效。现在,在我更改注册顺序之后。先注册命名类型,再注册未命名类型。它再次给了我两个相同的实例。但是如果我改回订单,那么它就可以了。新变化:container.Register(Component.For(typeof(IMyClass)).Instance(specialInstance).Named("special")); container.Register(Component.For(typeof(IMyClass)).Instance(genericInstance));
    猜你喜欢
    • 1970-01-01
    • 2019-12-23
    • 2013-05-23
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多