Dependency Injection Initialization

Note: I just started using AutoFac to learn about DI and IoC.

Is it supposed that dependency injection should be initialized in the controller constructor?

Like this?

private IMyService iMyService;
public HomeController(IMyServices myService)
{
    iMyService = myService;
}

Unlike...

public IMyService iMyService = new MyService();

Finally, it looks like the addiction still exists.

Edit: typo fixed, new MyService () function; There was a new IMyService ();

+4
source share
5 answers

. . . , Singleton, , .

. . - , , . , :

 public IMyService iMyService = new MyServiceImplementation();

. ( ).

+3

- , . , DI, , ( , , , ATM):

, :

public class MyAwesomeClass {
   private readonly IConfig _config;

   public MyAwesomeClass(IConfig config) {
      _config = config;
   }

   public IEnumerable<string> GetFiltered() {
      IEnumerable<string> results = _config.GetSettings();

      // filter my results
      return results.Where(x => x.StartsWith("awesome", StringComparison.OrdinalIgnoreCase));
   }
}

, GetFiltered, IConfig , ( depdendencies). , , : " , , , IConfig, ".

[Test]
public void GetsOnlyResultsContainingAwesome() {
   var fakeConfig = new FakeConfig();
   var awesome = new MyAwesomeClass(fakeConfig);

   IEnumerable<string> results = awesome.GetFiltered();

   Assert.AreEqual(2, results.Count());        
}

IConfig

public class FakeConfig : IConfig {
   public IEnumerable<string> GetSettings() {
      return new List<string> { "test1", "test2", "awesome1", "awesome2" };
   }
}

, . , , .

+2

. AutoFac, ninject .. . . , , AutoFac ninject .

, - , AutoFac ninject . , .

+1
private IMyService iMyService;
public HomeController(IMyServices myService)
{
    iMyService = myService;
}  

, (IMyServices)

public IMyService iMyService = new MyService();  

, ( MyService())

when developing a class, you know what you need.
but what will it be, what is not decided by you, what decided who uses your class

+1
source

All Articles