2010-02-23 7 views
5

Estoy usando .Net 3.5 y una aplicación de consola que finalmente se convertirá en un servicio de Windows.¿Qué DLL es el enlace (de T) de Ninject ubicado en

mayoría de los ejemplos me parecen usar algo como

Bind<IWeapon>().To<Sword>(); 

He incluido todo el DLL como referencias en mi proyecto y el compilador sigue quejándose. ¿Alguna pista de dónde estoy yendo mal? Lo siento, esta podría ser una pregunta estúpida.

ACTUALIZACIÓN: Observe una gran cantidad de otras bibliotecas que parecen ser necesarias, pero que no se mencionan. Hay bibliotecas como Castle Core. ¿Deberían estos estar incluidos?

Respuesta

7

Lo primero que debe asegurarse de estar haciendo es ejecutar su código de enlace dentro de un módulo de Ninject dentro del método Load, que anula.

Por ejemplo:

public class ApplicationModule : NinjectModule { 

    public override void Load() { 

    Bind<IWeapon>().To<Sword>(); 

    // additional bindings continue ... 
    } 
} 

La clase NinjectModule hereda clases e interfaces que definen la sintaxis de unión fluidez Ninject haciendo así que el método Bind<T>() disponibles dentro del alcance de la clase. Estos módulos se hacen pasar entonces al núcleo Ninject cuando se crea una instancia del kernel:

var kernel = new StandardKernel(new ApplicationModule()); 

El método de cada módulo pasa al kernel Load() entonces serán llamados y las definiciones vinculantes contenidas dentro de los métodos ejecutados.

El ejemplo anterior especifica NinjectModule como la clase base; sin embargo, esto es específico para la versión 2.0 de Ninject. Si está utilizando Ninject 1.x, su clase base será StandardModule. En cualquier caso, el método de carga se anula y las declaraciones vinculantes (que son similares en ambas versiones) se emiten allí.

Para responder a su pregunta más:

  • Para Ninject 1.x, el archivo DLL requerido es ninject.core.dll y el espacio de nombres que se define en StandardModule es Ninject.Core.

  • Para Ninhect 2.0, la DLL requerida es ninject.dll y el espacio de nombres en el que se define NinjectModule es Ninject.Modules.

En ambos casos, puede ser necesario hacer referencia a los espacios de nombres más, dependiendo de la complejidad de sus declaraciones vinculantes consiguen - es decir, si utiliza fijaciones contextuales o alcance sus fijaciones, etc. En el caso de Ninject 1.x, también puede necesitar hacer referencia a Ninject.Conditions.dll para estos casos más complejos.

No necesita hacer referencia a Castle.Core a menos que esté utilizando la función de interceptación de Ninject, que es una función principal 1.x pero una extensión en la versión 2.0.

Espero que esto ayude.

+0

Gracias. Solo puedo mostrarte una vez y seleccionar esto como la respuesta correcta. Desearía poder hacer más. Luché toda la tarde. Hay documentación sobre cómo todo se junta, pero tuve problemas para encontrar algo para mi situación. Otros tutoriales sobre cómo empezar todo parecían faltar cuando fui al resultado de la búsqueda. – uriDium

+0

¡Oye, no hay problema! Utilizo bastante Ninject y luché durante mucho tiempo cuando comparaba todos los contenedores de IoC. Me alegro de poder ayudar. –

0

Intente entrar en las propiedades de su proyecto (haga clic derecho en proyecto y haga clic en propiedades) y vuelva a orientar su aplicación de consola a .Net Framework 3.5, podría estar diciendo algo como ".Net Framework 3.5 Client Profile" actualmente. He tenido este mismo problema en el pasado donde los ensamblajes no harían referencia adecuadamente.

Espero que ese sea el problema y que esto ayude.

+0

Hola. Eché un vistazo rápido, pero no fue eso. Gracias de cualquier manera. – uriDium

Cuestiones relacionadas