Ninject是否支持Func(自动生成的工厂)?

Autofac自动为Func<T>生成工厂; 我甚至可以传递参数。

 public class MyClass { public MyClass(Func<A> a, Func<int, B> b) { var _a = a(); var _b = b(1); } } 

我能和Ninject一样吗? 如果没有,我可以应用哪种解决方法?

谢谢。

更新

刚发现这个post,似乎答案是否定的:

如何使用Ninject处理静态方法的类?

NB Ninject 3.0和更高版本已完全支持使用Ninject.Extensions.Factory包,请参阅wiki: – https://github.com/ninject/ninject.extensions.factory/wiki


编辑:注意Ninject 2.3中有一个Bind<T>().ToFactory()实现(这不是一个完全testing的支持版本,但是可以从CodeBetter服务器获得 )

Ninject目前不支持这种方式。 我们计划将其添加到下一个版本。 但是可以通过configuration适当的绑定来轻松添加支持。 只需加载下面的模块,享受。

 public class FuncModule : NinjectModule { public override void Load() { this.Kernel.Bind(typeof(Func<>)).ToMethod(CreateFunc).When(VerifyFactoryFunction); } private static bool VerifyFactoryFunction(IRequest request) { var genericArguments = request.Service.GetGenericArguments(); if (genericArguments.Count() != 1) { return false; } var instanceType = genericArguments.Single(); return request.ParentContext.Kernel.CanResolve(new Request(genericArguments[0], null, new IParameter[0], null, false, true)) || TypeIsSelfBindable(instanceType); } private static object CreateFunc(IContext ctx) { var functionFactoryType = typeof(FunctionFactory<>).MakeGenericType(ctx.GenericArguments); var ctor = functionFactoryType.GetConstructors().Single(); var functionFactory = ctor.Invoke(new object[] { ctx.Kernel }); return functionFactoryType.GetMethod("Create").Invoke(functionFactory, new object[0]); } private static bool TypeIsSelfBindable(Type service) { return !service.IsInterface && !service.IsAbstract && !service.IsValueType && service != typeof(string) && !service.ContainsGenericParameters; } public class FunctionFactory<T> { private readonly IKernel kernel; public FunctionFactory(IKernel kernel) { this.kernel = kernel; } public Func<T> Create() { return () => this.kernel.Get<T>(); } } }