Pregunta

¿Cómo se me trabó la interfaz para una clase concreta en un conjunto diferente?

Tengo los siguientes proyectos en mi solución:

Foo.Data
Foo.Domain

En la Estructura Mapa agrego mis dos nombres de montaje en el fichero de StructureMap.config y luego usando el PluginFamily y atributos enchufables mapa Mi interfaces para mi clase concreta.

¿Cómo se puede lograr lo mismo con Ninject?

¿Fue útil?

Solución

Voy a hacer un par de supuestos aquí.

  1. Usted tiene una interfaz llamada IBar en su proyecto Foo.Domain y tiene una clase concreta llamada BarClass en su proyecto Foo.Data.
  2. en el proyecto de referencia Foo.Domain hecho en su proyecto Foo.Data porque BarClass implementa IBar.

Lo más sencillo que ver con Ninject es crear una nueva clase en Foo.Data que se deriva de StandardModule de Ninject:

internal class BarModule : StandardModule {
  public override void Load() {
    Bind<IBar>()
      .To<BarClass>();
  }
}

Esta clase a continuación, establece la unión de las solicitudes de Ibar la clase concreta de BarClass. Este es el equivalente XML.

El siguiente paso es crear el kernel Ninject (también conocido como un "contenedor") y proporcionar este módulo (es decir, esta configuración) a la misma. Donde se hace esto depende en gran medida del tipo de una aplicación que está creando. En términos muy generales, se suele configurar el kernel en el punto de entrada lógico o sección "puesta en marcha" de su código. Si se tratara de una aplicación de consola o en el escritorio de Windows, esto probablemente sea una de las primeras cosas que la función main () hace.

El código sería así:

var modules = new IModule[] {
                              new BarModule()
                            };

var kernel = new StandardKernel(modules);

En este punto, cuando se hace algo como esto:

var barObj = kernel.Get<IBar>()

La variable barObj referencia a una instancia de BarClass.

Todo lo dicho, podría muy bien no tener una comprensión completa de todos los matices de su aplicación - por ejemplo, asambleas se cargan dinámicamente, etc. espero que esto es de alguna ayuda de todos modos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top