¿Ninject es compatible con Func (fábrica generada automáticamente)?

Autofac genera automáticamente fábricas para Func ; Incluso puedo pasar parámetros.

 public class MyClass { public MyClass(Func a, Func b) { var _a = a(); var _b = b(1); } } 

¿Puedo hacer lo mismo con Ninject? Si no, ¿qué solución puedo aplicar?

Gracias.

Actualización :

Acabo de encontrar esta publicación, parece que la respuesta es no:

¿Cómo manejo las clases con métodos estáticos con Ninject?

NB Ninject 3.0 y posteriores tienen esto totalmente compatible con el paquete Ninject.Extensions.Factory , consulte la wiki: – https://github.com/ninject/ninject.extensions.factory/wiki


EDITAR: NB hay una implementación de Bind().ToFactory() en Ninject 2.3 (que no es una versión totalmente compatible, pero está disponible desde el servidor CodeBetter )

Ninject no es compatible con esto de forma nativa en este momento. Planeamos agregar esto a la próxima versión. Pero el soporte se puede agregar fácilmente configurando el enlace apropiado. Solo carga el módulo a continuación y disfruta.

 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 { private readonly IKernel kernel; public FunctionFactory(IKernel kernel) { this.kernel = kernel; } public Func Create() { return () => this.kernel.Get(); } } }