3

我在使用 Castle.Windsor 的 TypedFactoryFacility 概念时遇到了问题,不知道如何解决(或者如果可以的话)。

我有一个这样定义的 ViewModel;

public class MyViewModel : IMyViewModel
{
    // constructor which I aim to access through the factory
    public MyViewModel(
        ISomeContainerResolvableDependency a,
        ISomePassedInDependency b)
    { ... }
}

以及相应的工厂接口定义如下;

public interface IMyViewModelFactory 
{
    IMyViewModel Create(ISomePassedInDependency a);

    void Release(IMyViewModel vm);
}

但是,当我尝试使用有效的非空实例调用工厂时ISomePassedInDependency

ISomePassedInDependency o = new SomePassedInDependency();
IMyViewModelFactory factory = IoC.Get<IMyViewModelFactory>();
IMyViewModel viewModel = factory.Create(o);

我收到一个异常,指出 Castle Windsor 无法从IMyViewModelon解决依赖关系ISomePassedInDependency。在这种情况下,我正在提供ISomePassedInDependency实例,并且只希望该设施ISomeContainerResolvableDependency为我解决问题。

如果我更改构造函数定义以接受我传入的值类型(int例如)而不是ISomePassedInDependency实例,则工厂调用有效。那么,似乎在 Castle Windsor 内部有一个假设,即所有引用类型都将被容器解析,而其他任何东西都不会?

有什么办法可以使这项工作?

4

1 回答 1

5

好的,我重新阅读了文档并注意到了我忽略的一条关键信息;工厂中的参数名称必须与正在实例化的对象中的参数名称匹配。

因此,在我上面的示例中,如果 ViewModel 的构造函数更改为;

public MyViewModel(
    ISomeContainerResolvableDependency x,
    ISomePassedInDependency a) // <-- NOTE this argument is now named 'a' to match the factory definition
{ ... }    

有用。

魔法。

于 2013-10-03T23:46:14.973 回答