Domanda

Come si legano la mia interfaccia di una classe concreta in un assembly diverso?

Ho i seguenti progetti in mia soluzione:

Foo.Data
Foo.Domain

In Struttura Mappa aggiungo i miei due nomi di assemblaggio al file StructureMap.config e quindi utilizzando il PluginFamily e gli attributi Pluggable mappa La mia interfacce per la mia classe di cemento.

Come si può ottenere la stessa cosa con Ninject?

È stato utile?

Soluzione

farò un paio di ipotesi qui.

  1. avere un'interfaccia denominata IBar nel progetto Foo.Domain e si dispone di una classe concreta chiamato BarClass nel progetto Foo.Data.
  2. È in progetto Foo.Domain riferimento fatto nel progetto Foo.Data perché BarClass implementa IBar.

La cosa più semplice da fare con Ninject è quello di creare una nuova classe in Foo.Data che deriva dalla StandardModule di Ninject:

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

Questa classe stabilisce poi l'associazione per le richieste di IBar alla classe concreta di BarClass. Questo è il tuo equivalente XML.

Il passo successivo consiste nel creare il kernel Ninject (pseudonimo un "contenitore") e fornire questo modulo (cioè questa configurazione) ad esso. Dove si esegue questa operazione dipende molto da che tipo di un programma che si sta creando. In termini molto generali, in genere si configurare il kernel nel punto di ingresso logico o sezione "start-up" del codice. Se fosse un'applicazione console o desktop di Windows, questo sarebbe probabilmente una delle prime cose che la funzione main () fa.

Il codice sarebbe come questo:

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

var kernel = new StandardKernel(modules);

A questo punto, quando si fa qualcosa di simile:

var barObj = kernel.Get<IBar>()

La variabile barObj riferimento a un'istanza di BarClass.

Tutto detto, avrei potuto benissimo non avere una piena comprensione di tutte le sfumature della vostra applicazione - per esempio assembly vengono caricati dinamicamente, ecc Hope questo è di qualche aiuto comunque.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top