使用 Castle Typed Factory Facility 获取具体实现
Using Castle Typed Factory Facility to get specific implementation
我正在构建一个依赖于能够在运行时实例化各种表单的 WPF 应用程序,所以我试图让 Castle 给我一个具有这种能力的工厂实现以及我希望能够实现的所有表单以这种方式创建实现 IBaseForm
接口。
这是我的工厂界面目前的样子:
public interface IFormFactory
{
IBaseForm Create(Type formType, string header);
void Release(IBaseForm component);
}
其中 formType 参数是我希望 castle 用于其查找的参数,这当然不起作用,在这种情况下,Castle 将始终使用 return 类型的 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);
}
}
我正在构建一个依赖于能够在运行时实例化各种表单的 WPF 应用程序,所以我试图让 Castle 给我一个具有这种能力的工厂实现以及我希望能够实现的所有表单以这种方式创建实现 IBaseForm
接口。
这是我的工厂界面目前的样子:
public interface IFormFactory
{
IBaseForm Create(Type formType, string header);
void Release(IBaseForm component);
}
其中 formType 参数是我希望 castle 用于其查找的参数,这当然不起作用,在这种情况下,Castle 将始终使用 return 类型的 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);
}
}