2009-10-16 60 views
2

我在MVC项目中使用Ninject,并且我在Ninject.Mvc中使用了自动注册功能,并在我的应用程序类中设置了我的绑定。但是,我有一个地方想创建一个与这些绑定分开的实例。在StructureMap中,你可以做var foo = ObjectFactory.GetInstance<IFoo>();,它会为你解决它。 Ninject 2中是否有等价物?我似乎无法在任何地方找到它。寻找相当于StructureMap的ObjectFactory.GetInstance()方法的Ninject

回答

6

AFAIK,NInject没有这样的静态方法,所以所有的解决办法都应该去一些内核。

但是你可以很容易地实现它;

class ObjectFactory 
{ 
    static IKernel kernel = new StandardKernel(.....); 
    public static T GetInstance<T>() 
    { 
      return kernel.Get<T>(); 
    } 
} 

虽然IMO,NInject作为DI容器比服务定位器更有用。

+0

是的,这是很简单的添加静态容器访问。当需要访问者时,我们有一个被重用:http://github.com/idavis/ninject.extensions.wcf/blob/master/source/Ninject.Extensions.Wcf/KernelContainer.cs – 2009-10-16 13:34:27

1

你也可以使用Common Service Locator作为Ninject IOC的抽象层,它提供你想要的。优点是,如果它不再适合您的需求,您可以稍后切换容器。

在你的代码可以使用这样的事情:

ServiceLocator.Current.GetInstance<Type>();