Mittwoch, 30. September 2009

Verschiedene Implementationen des selben Interfaces mit Unity "injecten"

PersonRepository und VorgangRepository sind zwei Implementationen eines Interfaces: IRepoistory
Um nun meinen DBAdapter, der (natürlich IDBAdapter implementiert und) beide IRepositories als parameter (natürlich in der richtigen Reihenfolge...) benötigt (Ob das eine tolle Idee war sei mal dahin gestellt.) instanziieren zu können, habe ich folgendes gemacht:
IUnityContainer container = UnityContainerProvider.UnityContainer;
container.RegisterType<IDbAdapter, DbAdapter>();
container.RegisterType<IRepository, PersonRepository>("Person");
container.RegisterType<IRepository, VorgangRepository>("Vorgang");
container.Configure<InjectedMembers>().ConfigureInjectionFor<DbAdapter>(
 new InjectionConstructor(
  new ResolvedParameter<IRepository>("Person"),
  new ResolvedParameter<IRepository>("Vorgang")
  ));
  • Configure() - Ich will die Member der Injection steuern...
  • ConfigureInjectionFor() - auf den DBAdapter instanzen
  • new InjectionConstructor() - der Konstruktor soll gesteuert werden
  • new ResolvedParameter("Person") - IRepository soll mit dem Key "Person" aufgelöst werden.
Etwas störend finde ich die Notwendigkeit dies über zwei Strings zu steuern, also wenn jemand eine bessere Idee hat.. Immer her damit.

Edit: Etwas besser ist natürlich das IRepository noch zwei mal abzuleiten (wenn dies möglich ist...) einmal als
IPersonenRepository und einmal als IVorgangsRepository.

Keine Kommentare:

Kommentar veröffentlichen