title: Angular DI using injection token for model class
body: <p>I am trying to do something here, but not sure if it can be done.
  I want to create a model class like this:</p>
  <pre><code>import { Inject } from '@angular/core';
  import {
      Element,
      Image,
  } from '@situlive/situ-angular-components/contentful';
  
  export class ImageColumn {
      title: string;
      backgroundImage: Image;
      backgroundImageAlignment: string;
  
      constructor(
          element: Element
      ) {
          this.title = element.fields.title;
          this.backgroundImageAlignment = element.fields.backgroundImageAlignment;
      }
  }
  </code></pre>
  <p>This is so that in a component or service I can just do a <code>new ImageColumn(element)</code> and it will bind the properties for me.
  Easy so far.</p>
  <p>Now I have a complication :) I need to bind the the <strong>backgroundImage</strong>, which is done through a service. I updated the constructor to this:</p>
  <pre><code>import { Inject } from '@angular/core';
  import {
      ContentfulService,
      Element,
      Image,
  } from '@situlive/situ-angular-components/contentful';
  
  export class ImageColumn {
      title: string;
      backgroundImage: Image;
      backgroundImageAlignment: string;
  
      constructor(
          contentfulService: ContentfulService,
          element: Element
      ) {
          this.title = element.fields.title;
          this.backgroundImageAlignment = element.fields.backgroundImageAlignment;
  
          this.backgroundImage = this.contentfulService.createImage(
              element.fields.backgroundImage[0]
          );
      }
  }
  </code></pre>
  <p>which is fine, but it causes an issue, because now anywhere where I use an <strong>ImageColumn</strong> I now have to pass in the <strong>contentfulService</strong>. I would really love to be able to pass the service without needing to supply it in the constructor.</p>
  <p>I have done this before with services using <strong>injection tokens</strong>, so I figured I could do it here.
  I created an injection token like this:</p>
  <pre><code>import { InjectionToken } from '@angular/core';
  
  import { ContentfulService } from '@situlive/situ-angular-components/contentful';
  
  export const CONTENTFUL_SERVICE = new InjectionToken&lt;ContentfulService&gt;(
    'CONTENTFUL_SERVICE'
  );
  </code></pre>
  <p>which I provided in my module like this:</p>
  <pre><code>@NgModule({
    imports: [
      CommonModule,
      HttpClientModule,
      RouterModule,
  
      AuthModule.forRoot(environment.auth0),
      ContentfulModule.forRoot(environment.contentful),
    ],
    declarations: [FooterComponent, HeaderComponent],
    exports: [FooterComponent, HeaderComponent],
    providers: [
      {
        provide: HTTP_INTERCEPTORS,
        useClass: BearerInterceptor,
        multi: true,
      },
      {
        provide: CONTENTFUL_SERVICE,
        useClass: ContentfulService,
        multi: true,
      },
    ],
  })
  export class CoreModule {}
  </code></pre>
  <p>So I figured I would be able to do this to my model:</p>
  <pre><code>import { Inject } from '@angular/core';
  import {
      ContentfulService,
      Element,
      Image,
  } from '@situlive/situ-angular-components/contentful';
  
  import { CONTENTFUL_SERVICE } from '../contentful-service.token';
  
  export class ImageColumn {
      title: string;
      backgroundImage: Image;
      backgroundImageAlignment: string;
  
      constructor(
          @Inject(CONTENTFUL_SERVICE) private contentfulService: ContentfulService,
          element: Element
      ) {
          this.title = element.fields.title;
          this.backgroundImageAlignment = element.fields.backgroundImageAlignment;
  
          this.backgroundImage = this.contentfulService.createImage(
              element.fields.backgroundImage[0]
          );
      }
  }
  </code></pre>
  <p>The problem is, now when i do a <code>new ImageColumn(element)</code> it complains that I need 2 arguments but only got 1.
  Does anyone know how I can get around this?</p>