我有一个程序集:Asbly1
声明了这个界面:
public interface IFieldFactory<T>
{
T createFieldObject(string fieldKey, object fieldValue);
}
我试图公开此界面,以便创建提供fieldKey
和fieldValue
的对象。
组建另一个集会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)
);