NInject工厂按惯例绑定

时间:2015-10-27 13:40:41

标签: c# ninject

我有一个程序集:Asbly1声明了这个界面:

public interface IFieldFactory<T>
{
    T createFieldObject(string fieldKey, object fieldValue);
}

我试图公开此界面,以便创建提供fieldKeyfieldValue的对象。

组建另一个集会AnotherAsbly我创建了一个IFieldFactory<Domain.MetaInfoValue>具体工厂:

public class FieldFactory : IFieldFactory<Domain.MetaInfoValue>
{

    public Domain.MetaInfoValue createFieldObject(string fieldKey, object fieldValue)
    {
        Type fieldValueType = fieldValue.GetType();
        if (fieldValueType.Equals(typeof(String)))
        {
            return new Domain.StringMetaInfoValue(fieldKey, (string)fieldValue);
        }

        return null;
    }
}

从汇编Asbly1我希望得到每个IFactory<T>实现,并根据T泛型类型使用它们。

我想我需要将IFactory<T>绑定到他们的任何实现:

public class FieldFactoryModule : Ninject.Modules.NinjectModule
{
    public override void Load()
    {
        this.Bind(scanner => scanner.FromAssembliesMatching("*")
            .SelectAllClasses()
            .InheritedFrom(typeof(IFieldFactory<>))
            .BindToFactory()
            .Configure(c => c.InSingletonScope())
        );
    }
}

那么,之后,有可能存在IFieldFactory<T>的多个实现。问题是,如何根据T = runtime provided type获得concreate工厂?

我想它可以这样做:

UIFramework.Proxy.Extension.IoC.NInjectKernelHolder.Instance.Kernel.Get(
    runtimeType,
    new Ninject.Parameters.Parameter("fieldKey", propertyName, true),
    new Ninject.Parameters.Parameter("fieldValue", assignedValue, true)
);

0 个答案:

没有答案