한 걸음 한 걸음 IOC

2233 단어
코드 한 토막
class Program
{
    static void Main(string[] args)
    {
        var shop=new Shop();
        shop.Add();
        shop.Delete();
        Console.ReadKey();
    }
}
class Shop
{
    readonly Log4NetServices _logServices;

    public Shop()
    {
        _logServices = new Log4NetServices();
    }

    public void Add()
    {
        _logServices.Write("    ");
    }

    public void Delete()
    {
        _logServices.Write("    ");
    }
}

문제.
  • 구체적인 Log4NetServices에 의존하고 FileLogServices로 바꾸려면 변경
  • 의지하다


    의존은 변형:readonly ILogServices _logServices;
    이렇게 하면 실제 사용에서 IlogServices의 실현에 관여하지 않고 Shop의 구조 함수가 구체적인 실현을 책임진다
    문제.
  • Shop 자체도 Log4NetServices를 사용할지 FileLogServices를 사용할지 모르지만 사용자는 틀림없이 알고 있을 것이다.

  • 부어 넣다


    주입은 당신이 필요로 하는 것을 당신에게 전달하는 것입니다. 당신 자신을 사용하지 않아도 됩니다.
    변형:
    class Program
    {
        static void Main(string[] args)
        {
            var shop=new Shop(new Log4NetServices());
            shop.Add();
            shop.Delete();
            shop=new Shop(new FileLogServices());
            shop.Add();
            shop.Delete();
            Console.ReadKey();
        }
    }
    class Shop
    {
        readonly ILogServices _logServices;
    
        public Shop(ILogServices logServices)
        {
            _logServices = logServices;
        }
    
        public void Add()
        {
            _logServices.Write("    ");
        }
    
        public void Delete()
        {
            _logServices.Write("    ");
        }
    }

    질문:
  • 필요한 사람이 많아졌어. 나 하나씩 new?
  • 필요한 종류가 많아졌어요. 하나하나 new?
  • new의 물건을 함께 놓을 수 있는지, 필요한 사람은 안에서 통일적으로 들 수 있는지.

  • IOC


    dotnetcore의 ioc 예시
    class Program
    {
        static void Main(string[] args)
        {
            var serviceCollection = new ServiceCollection();
            serviceCollection.AddSingleton();
            var serviceProvider = serviceCollection.BuildServiceProvider();
            var logServices = serviceProvider.GetService();
            var shop = new Shop(logServices);
            shop.Add();
            shop.Delete();
            Console.ReadKey();
        }
    }

    좋은 웹페이지 즐겨찾기