Dependency Injector

This commit is contained in:
2018-02-27 23:04:37 +01:00
parent 6ddb90e8e2
commit 70ce7711a7
5 changed files with 45 additions and 41 deletions

View File

@@ -15,7 +15,7 @@ export class VinylCatalog implements IMusicRepository {
return this.vinylList;
}
getById(id: number): Track | null {
return this.vinylList.filter(track => track.Id == id).pop() as Track;
return this.vinylList.filter(track => track.id == id).pop() as Track;
}
add(track: Track): number {
return this.vinylList.push(track);
@@ -23,9 +23,9 @@ export class VinylCatalog implements IMusicRepository {
edit(id: number, track: Track): Track {
var existingTrack = this.getById(id);
if (existingTrack) {
existingTrack.Artist = track.Artist;
existingTrack.Title = track.Title;
existingTrack.Duration = track.Duration;
existingTrack.artist = track.artist;
existingTrack.title = track.title;
existingTrack.duration = track.duration;
return existingTrack;
}
throw new Error("Track not found");

View File

@@ -1,15 +1,14 @@
export class Track{
export class Track {
constructor(id: number, title: string, artist: string, duration:number){
this.Id= id;
this.Title= title;
this.Artist= artist;
this.Duration= duration;
this.id= id;
this.title= title;
this.artist= artist;
this.duration= duration;
}
public Id : number;
public Title: string;
public Artist: string;
public Duration: number;
public id : number;
public title: string;
public artist: string;
public duration: number;
}

View File

@@ -3,20 +3,11 @@ import { MusicCatalogService } from "../domain/services/MusicCatalogService"
import { IMusicRepository } from "../domain/ports/IMusicRepository";
import { Track } from "../domain/models/Track";
import { VinylCatalog } from "../adapters/music/VinylCatalog";
import { Wiring } from "../wiring/Wiring";
export class MusicComponent {
constructor() {
console.log('registering IMusicRepository');
Wiring.register('IMusicRepository', () => new VinylCatalog());
var injector = Wiring.GetInjector();
let musicRepository = injector.inject<IMusicRepository>("IMusicRepository");
console.log('IMusicRepository is', musicRepository);
//let musicCatalogService = new MusicCatalogService(injector.inject<IMusicRepository>("IMusicRepository"));
const injector = Wiring.getInjector();
let musicCatalogService = MusicCatalogService.new(injector);
let track = new Track(8, "Niels 1st", "Niels Kooiman", 45);

15
src/wiring/Container.ts Normal file
View File

@@ -0,0 +1,15 @@
import { IInjector } from "../domain/ports/IInjector"
export class Container implements IInjector {
private items : any = { };
public register(name : string, fn : Function) : void {
this.items[name] = fn;
}
public inject<T>(name: string): T {
if (this.items[name]) {
return this.items[name]();
}
throw new Error(`Failed to resolve ${name}`)
}
}

View File

@@ -1,20 +1,19 @@
import { IInjector } from "../domain/ports/IInjector";
import { Container } from "./Container";
import { VinylCatalog } from "../adapters/music/VinylCatalog";
import { IInjector } from "../domain/ports/IInjector"
export class Wiring implements IInjector {
private static container : any = { };
public static register(name : string, fn : Function) : void {
Wiring.container[name] = fn;
};
public static GetInjector() : IInjector {
return new Wiring();
export class Wiring {
private static injector : IInjector;
public static apply() : void {
console.log('registering IMusicRepository');
const container = new Container();
container.register('IMusicRepository', () => new VinylCatalog());
Wiring.injector = container;
}
public inject = function<T>(name : string) : T {
if (Wiring.container[name]) {
return Wiring.container[name]();
public static getInjector() : IInjector {
if (!Wiring.injector) {
Wiring.apply();
}
throw new Error(`Failed to resolve ${name}`)
};
};
return Wiring.injector;
}
}