使用城堡类型工厂设施获得特定实现
本文关键字:实现 设施 城堡 类型 工厂 | 更新日期: 2023-09-27 18:31:57
我正在构建一个依赖于能够在运行时实例化各种表单的 WPF 应用程序,所以我试图让 Castle 为我提供一个具有此功能的工厂实现,我希望能够以这种方式创建的所有表单都实现 IBaseForm
接口。
以下是我的工厂界面当前的样子:
public interface IFormFactory
{
IBaseForm Create(Type formType, string header);
void Release(IBaseForm component);
}
其中 formType 参数是我希望 castle 用于其查找的参数,这当然不起作用,在这种情况下,Castle 将始终使用 create 的返回类型进行查找。
那么,类型工厂设施是否允许任何约定来支持此行为,或者是否有另一种方法可以在维护容器抽象的同时实现此工厂?
我能够通过添加自定义TypedFactoryComponentSelector以及我的工厂来解决这个问题。以下是实现:
public class FormFactoryComponentSelector : DefaultTypedFactoryComponentSelector
{
protected override Type GetComponentType(MethodInfo method, object[] arguments)
{
if (arguments.Length >= 1 && arguments[0] is Type)
{
return (Type)arguments[0];
}
return base.GetComponentType(method, arguments);
}
}