Dependency Injection Dependency Injection https support microsoft comzhcnlifecycleselectindex
- Slides: 87
Dependency Injection 那些事儿
Dependency Injection 那些事儿
生命周期策略:https: //support. microsoft. com/zh-cn/lifecycle/selectindex
分析数据源自 https: //wappalyzer. com/
分析数据源自 https: //wappalyzer. com/
了解它的本质 词云生成自:https: //www. qt 86. com/tools/ciyun. php
DI 的时间表(. NET ) · 1983年Hollywood principle The Mesa Programming Environment · 1988年 6/7月份的时候好莱坞原则的另一种说法Inversion of Control首次出现在文章《Designing Reusable Classes》中 C#发布 · 2000年 6月C#. NET Framework 1. 0发布 · 2002年 2月. NET Framework · 2004年 1月Martin Fowler Inversion of Control Containers and the Dependency Injection pattern Dependency Injection · 2004年 6月 Structure. Map 0. 80 2. 6. 3 · 2004年 8月 Spring. NET 0. 6 · 2006年 1月Windsor Release-Jan-06 1. 3. 0 4. 0. 0 -alpha 1 · 2007年 11月Autofac 1. 0 4. 9. 0 -beta 1 · 2008年 5月Unity Container 1. 1 · 2010年 2月Ninject 1. 5 5. 0. 0 -beta 001 2. 1 3. 3. 4 . NET Core RC 1发布,并在这个版本的中发布了Microsoft. Extensions. Dependency. Injection. Abstractions 和其默认实 · 2015年 11月. NET Core Microsoft. Extensions. Dependency. Injection 现Microsoft. Extensions. Dependency. Injection . NET Core 2. 2. 0发布的,同月发布3. 0. 0 Preview 1 · 2018年 12月. NET Core
读懂它的思路 The major cause of the software crisis is that the machines have become several orders of magnitude more powerful! To put it quite bluntly: as long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has become an equally gigantic problem. 如果没电脑,编程就根本不是问题 如果电脑差,编程就是个小问题 如果电脑非常好,编程就是个大问题 软件危机就是因为现在机器变好了,编程变麻烦了带来的问题 参考:https: //en. wikipedia. org/wiki/Software_crisis
读懂它的思路 参考:https: //en. wikipedia. org/wiki/Design_Patterns
读懂它的思路 我们需要什么样的设计 • https: //en. wikipedia. org/wiki/Maintainability • https: //en. wikipedia. org/wiki/Software_testability • https: //en. wikipedia. org/wiki/Extensibility • https: //en. wikipedia. org/wiki/Late_binding • https: //en. wikipedia. org/wiki/Integrated_development_environment • • https: //en. wikipedia. org/wiki/Aspect-oriented_programming https: //en. wikipedia. org/wiki/Loose_coupling
读懂它的思路 • Single responsibility principle • Open/Closed Principle • Liskov Substitution Principle • Interface Segregation Principle • Dependency Inversion Principle
读懂它的思路 Message. Store Message. Serivce Message. Controller
读懂它的思路 public interface IStore<E> { E[] Query. All(); bool Save(E obj); } public class Message. Store : IStore<Message> { //从mssql中查询存储数据 public Message[] Query. All() => new Message[0]; public bool Save(Message obj) => true; }
读懂它的思路 public interface IMessage. Serivce { Message[] Get. All. Messages(); bool Add. New. Message(Message message); } public class Message. Serivce : IMessage. Serivce { private readonly IStore<Message> message. Store = new Message. Store(); public Message[] Get. All. Messages() => message. Store. Query. All(); public bool Add. New. Message(Message message) => message != null && message. Store. Save(message); }
读懂它的思路 public class Message. Contoller : Controller { private readonly IMessage. Serivce message. Serivce = new Message. Serivce(); [Http. Get] public View. Result Index() => View(message. Serivce. Get. All. Messages()); [Http. Post] public Json. Result Add. New. Message([From. Body] Message message) => Json(message. Serivce. Add. New. Message(message)); }
读懂它的思路 public class Sql. Server. Message. Store : IStore<Message> { //从mssql中查询存储数据 public Message[] Query. All() => new Message[0]; public bool Save(Message obj) => true; } public class My. SQLMessage. Store : IStore<Message> { //从mysql中查询存储数据 public Message[] Query. All() => new Message[0]; public bool Save(Message obj) => true; }
读懂它的思路 public class Message. Serivce : IMessage. Serivce { protected IStore<Message> Message. Store => Create. Message. Store(); protected virtual IStore<Message> Create. Message. Store() => new Sql. Server. Message. Store(); public Message[] Get. All. Messages() => Message. Store. Query. All(); public bool Add. New. Message(Message message) => message != null && Message. Store. Save(message); } public class My. SQLMessage. Serivce : Message. Serivce, IMessage. Serivce { protected override IStore<Message> Create. Message. Store() => new My. SQLMessage. Store(); }
读懂它的思路 public class Message. Store. Factory { public static readonly Message. Store. Factory Instance = new Message. Store. Factory(); public IStore<Message> Create. Message. Store() { var db. Type = App. Configuration. Get. DBType(); if (string. Equals(db. Type, "mysql", String. Comparison. Ordinal. Ignore. Case)) return new My. SQLMessage. Store(); if (string. Equals(db. Type, "mssql", String. Comparison. Ordinal. Ignore. Case)) return new Sql. Server. Message. Store(); throw new Configuration. Exception(); } }
读懂它的思路 public class Message. Serivce : IMessage. Serivce { private readonly IStore<Message> message. Store = Message. Store. Factory. Instance. Create. Message. Store(); public Message[] Get. All. Messages() => message. Store. Query. All(); public bool Add. New. Message(Message message) => message != null && message. Store. Save(message); }
读懂它的思路 public class Sql. Server. Photo. Store : IStore<Photo> { //从mssql中查询存储数据 public Photo[] Query. All() => new Photo[0]; public bool Save(Photo obj) => true; } public class My. SQLPhoto. Store : IStore<Photo> { //从mysql中查询存储数据 public Photo[] Query. All() => new Photo[0]; public bool Save(Photo obj) => true; }
读懂它的思路 public interface IStore. Factory { IStore<Message> Create. Message. Store(); IStore<Photo> Create. Photo. Store(); }
读懂它的思路 public class Sql. Server. Store. Factory : IStore. Factory { public IStore<Message> Create. Message. Store() => new Sql. Server. Message. Store(); public IStore<Photo> Create. Photo. Store() => new Sql. Server. Photo. Store(); } public class My. SQLStore. Factory : IStore. Factory { public IStore<Message> Create. Message. Store() => new My. SQLMessage. Store(); public IStore<Photo> Create. Photo. Store() => new My. SQLPhoto. Store(); }
读懂它的思路 public class Store. Factory { public static readonly Store. Factory Instance = new Store. Factory(); public IStore. Factory Create. Store. Factory() { var db. Type = App. Configuration. Get. DBType(); if (string. Equals(db. Type, "mysql", String. Comparison. Ordinal. Ignore. Case)) return new Sql. Server. Store. Factory(); if (string. Equals(db. Type, "mssql", String. Comparison. Ordinal. Ignore. Case)) return new My. SQLStore. Factory(); throw new Configuration. Exception(); } }
读懂它的思路 public class Message. Serivce { private readonly IStore<Message> message. Store; private readonly IStore<Photo> photo. Store; public Message. Serivce() { var store. Factory = Store. Factory. Instance. Create. Store. Factory(); message. Store = store. Factory. Create. Message. Store(); photo. Store = store. Factory. Create. Photo. Store(); } //. . . }
读懂它的思路 System. Data. Common. Db. Provider. Factory
读懂它的思路 public static class Service. Locator { private static readonly Concurrent. Dictionary<Type, object> cache = new Concurrent. Dictionary<Type, object>(); public static void Register<I, T>(T service) where T : class, I => cache. Try. Add(typeof(T), service); public static I Get. Service<I>() => (I)cache. Get. Or. Add(typeof(I), null); }
读懂它的思路 public void Configure() { var db. Type = App. Configuration. Get. DBType(); if (string. Equals(db. Type, "mysql", String. Comparison. Ordinal. Ignore. Case)) { Service. Locator. Register<IStore<Message>, My. SQLMessage. Store> (new My. SQLMessage. Store()); Service. Locator. Register<IStore<Photo>, My. SQLPhoto. Store> (new My. SQLPhoto. Store()); } else if (string. Equals(db. Type, "mssql", String. Comparison. Ordinal. Ignore. Case)) { Service. Locator. Register<IStore<Message>, Sql. Server. Message. Store> (new Sql. Server. Message. Store()); Service. Locator. Register<IStore<Photo>, Sql. Server. Photo. Store> (new Sql. Server. Photo. Store()); } }
读懂它的思路 public class Message. Serivce { private readonly IStore<Message> message. Store; private readonly IStore<Photo> photo. Store; public Message. Serivce() { message. Store = Service. Locator. Get. Service<IStore<Message>>(); photo. Store = Service. Locator. Get. Service<IStore<Photo>>(); } //. . . }
读懂它的思路 反模式 http: //blog. ploeh. dk/2010/02/03/Service. Locatorisan. Anti-Pattern/
了解它的本质 好莱坞原则 Hollywood principle
剖析好或不好 收集对象 创建实例 IService. Collection IService. Provider Transient Service. Descriptor 描述依赖关系以及生命周期 Scoped Singleton
收集到的一些有意思的链接 • https: //github. com/Microsoft/dotnet/blob/master/dotnet-developer-projects. md • https: //github. com/danielpalme/Ioc. Performance • https: //weblogs. asp. net/jhallal/list-of-net-dependency-injection-containers-ioc • https: //docs. microsoft. com/en-us/azure/architecture/ • https: //docs. microsoft. com/en-us/previous-versions/msp-n-p/dn 178470(v%3 dpandp. 30) • https: //docs. microsoft. com/zh-cn/aspnet/core/fundamentals/dependencyinjection? view=aspnetcore-2. 2
- Types of injection
- Martin fowler inversion of control
- Phpunit setexpectedexception
- Moq dependency injection
- Inversion of control
- Signal word
- Microsoft premier support
- Azure pro direct support
- Microsoft official academic course microsoft word 2016
- Microsoft official academic course microsoft excel 2016
- Microsoft microsoft edge startwarren theverge
- Ms excel merupakan aplikasi pengolah
- Microsoft official academic course microsoft word 2016
- Https://support.google.c
- Portal.office 365.com
- Er https://partner.microsoft.com
- "microsoft ab"
- What is microsoft identity platform
- Compeering
- Azure alerts
- Inhaltsverzeichnis word
- "https://za.pinterest.com" https://za.pinterest.com
- "https://br.pinterest.com" https://br.pinterest.com
- Https://kahoot. it
- Transitive dependency in dbms
- Wallerstein's world systems theory
- Cherwell for dependency mapping
- Sex ratio rumus
- Modernization theory vs dependency theory
- Structure dependency principle
- Criticism in
- Bcnf in dbms
- Observer pattern sequence diagram
- Dependency class diagram
- Normailization
- Join dependency example
- Multi valued dependency
- Multivalued dependency
- Dependency ratio rumus
- Ketergantungan fungsional
- Transitive dependency in dbms
- Inclusion dependency
- Informal design guidelines 2 is about
- Contoh functional dependency
- Dependency theory in development communication
- Transitive dependency
- Conceptual dependency theory
- Conceptual dependency in ai
- Codependency meaning
- Existence dependence occurs on
- Transitive dependency in dbms
- Sex ratio ap human geography definition
- North-south split ap human geography
- Normalizatio
- Linear dependency
- Do linear transformations preserve linear independence
- Contoh soal beban ketergantungan
- Dependency relationship
- Dependency inversion principle example
- Superpipeline
- Dependency management
- Spring bean dependency graph
- Dependency management
- Dependency theory in international communication
- Dependency locality theory
- Dependency inversion principle simple example c#
- Data dependency analysis
- Minimal basis functional dependency
- Dependency relationship
- Wpf dependency property
- Use case for atm withdrawal
- Superskalar
- Prague dependency treebank
- Partial dependency normalization
- Immigration policies ap human geography definition
- Functional dependency calculator
- Dependency rejection
- Preferred power tactics by influence direction
- Dependency reversal
- Benefits dependency network
- Rimland theory ap human geography
- Dependency finder
- Benefit dependency network
- Dobj dependency
- Conceptual dependency
- Antinatalitas