使用Castle Typed Factory Facility获得具体实施

时间:2016-01-26 23:56:22

标签: c# castle-windsor

我正在构建一个WPF应用程序,它依赖于能够在运行时实例化各种表单,所以我试图让Castle为我提供具有此功能的工厂实现以及我希望能够创建的所有表单这种方式实现了IBaseForm接口。

以下是我的工厂界面目前的样子:

public interface IFormFactory
{
    IBaseForm Create(Type formType, string header);
    void Release(IBaseForm component);
}

如果formType参数是我希望城堡用于查找哪些内容无法正常工作,那么Castle将始终使用create的返回类型进行查找。

那么类型工厂设施允许哪些约定会支持这种行为,还是有另一种方法可以在保持容器抽象的同时实现这个工厂?

1 个答案:

答案 0 :(得分:0)

我能够通过添加自定义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);
    }
}