Ninject supporta Func (factory generato automaticamente)?

Autofac genera automaticamente factory per Func ; Posso persino passare i parametri.

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

Posso fare lo stesso con Ninject? In caso contrario, quale soluzione alternativa posso applicare?

Grazie.

Aggiornamento :

Ho appena trovato questo post, sembra che la risposta sia no:

Come gestisco le classi con metodi statici con Ninject?

NB Ninject 3.0 e versioni successive sono completamente supportati utilizzando il pacchetto Ninject.Extensions.Factory , consultare il wiki: – https://github.com/ninject/ninject.extensions.factory/wiki


EDIT: NB esiste un’implementazione Bind().ToFactory() in Ninject 2.3 (che non è una versione completamente supportata ma disponibile dal server CodeBetter )

Ninject non supporta questo in modo nativo al momento. Abbiamo pianificato di aggiungere questo alla prossima versione. Ma il supporto può essere aggiunto facilmente configurando l’associazione appropriata. Basta caricare il modulo qui sotto e divertiti.

 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(); } } }