我正在看本教程,但不太了解如何创建一个可以为我提供单独的接口实现的工厂。
http://stefanoricciardi.com/2011/01/21/ninject-mini-tutorial-part-1/
public class IJob {
...
}
public class JobImpl1 : IJob {
...
}
public class JobImpl2 : IJob {
...
}
using (IKernel kernel = new StandardKernel()) {
kernel.Bind<IJob>().To<JobImpl2>();
var job = kernel.Get<IJob>();
}
我的目标是创建一个包装此Ninject内核的工厂类,以便根据我是在单元测试环境还是在实时环境中提供不同的IJob接口实现。但是,我还希望将Ninject隐藏在工厂包装器中,以便其余代码不依赖于Ninject。
答案 0 :(得分:2)
有一个单独的扩展程序Ninject.Extensions.Factory,允许您基于接口
快速生成抽象工厂实施var kernel = new StandardKernel();
// wire concrete implementation to abstraction/interface
kernel.Bind<IJob>().To<JobImpl1>()
.NamedLikeFactoryMethod<IJob, IJobFactory>(f => f.GetJob());
// configure IJobFactory to be Abstract Factory
// that will include kernel and act according to kernel configuration
kernel.Bind<IJobFactory>().ToFactory();
// get an instance of Abstract Factory
var abstractFactory = kernel.Get<IJobFactory>();
// resolve dependency using Abstract Factory
var job = abstractFactory.GetJob()
public interface IJobFactory
{
IJobFactory GetJob();
}