Castle.Windsor TypedFactoryFacility是否可以构造一个类型,只有一些内联传递的引用参数
本文关键字:引用 参数 类型 一个 是否 TypedFactoryFacility Windsor Castle | 更新日期: 2023-09-27 18:33:45
我在使用Castle.Windsor的TypedFactoryFacility概念时遇到了一个问题,不知道如何解决它(或者我是否可以)。
我有一个这样定义的视图模型;
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);
我得到一个例外,指出温莎城堡无法解决IMyViewModel
对ISomePassedInDependency
的依赖关系。在这种情况下,我提供ISomePassedInDependency
实例,并且只希望该工具为我解析ISomeContainerResolvableDependency
。
如果我更改构造函数定义以接受我传入的值类型(例如int
)而不是ISomePassedInDependency
实例,则工厂调用有效。因此,温莎城堡内部似乎有一个假设,即所有引用类型都将被容器解析,而其他任何引用类型都不会?
有没有办法做到这一点?
好的,我重新阅读了文档,并注意到我忽略了一条关键信息;工厂中的参数名称必须与正在实例化的对象的参数名称匹配。
因此,在我上面的例子中,如果将 ViewModel 的构造函数更改为;
public MyViewModel(
ISomeContainerResolvableDependency x,
ISomePassedInDependency a) // <-- NOTE this argument is now named 'a' to match the factory definition
{ ... }
它有效。
魔法。