使用城堡类型工厂设施获得特定实现

本文关键字:实现 设施 城堡 类型 工厂 | 更新日期: 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);
    }
}