Dependency Injector
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
15
src/wiring/Container.ts
Normal 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}`)
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user