Angular 2 cuando usar DI, proveedor o importación pura?

Estoy un poco confundido cuando es apropiado usar qué.

1. Defina la clase con funciones estáticas, solo importe y use el nombre importado y luego la función

Clase compartida:

export class SomeClass {
   static someFunction(){
      ...
   }
}

Clase que utiliza la clase exportada:

import { SomeClass } from './someclassstatic'
...
constructor(){
    SomeClass.someFunction()
}

2. Defina la clase estándar, luego monte a través de DI

Clase compartida:

export class SomeClassDI {
   public someFunctionDI(){
      ...
   }
}

Clase que utiliza la clase exportada:

import { SomeClassDI } from './someclassdi'
...
constructor(private theclassdi:SomeClassDI){
    this.theclassdi.someFunction()
}

3. Defina la clase estándar, luego monte como proveedor mientras arranca

Clase compartida:

export class SomeClassBS {
   public someFunctionBS(){
      ...
   }
}

Clase que arranca Angular2

import { SomeClassBS } from './someclassbs'
...
bootstrap(AppComponent, [SomeClassBS]);

Clase que utiliza la clase exportada:

??? I am not sure what can be the example here. 

¿Cuál es el uso adecuado de los proveedores?

Respuestas a la pregunta(1)

Su respuesta a la pregunta