勇哥注:
主要是阅读时的代码由java转为C#。
(一)简单示例
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication7 { class Program { static void Main(string[] args) { var movie = new MovieLister(); var list= movie.MoviesDirectedBy("史蒂文·斯皮尔伯格"); foreach(var m in list) { Console.WriteLine($"{m.movieName}\t{m.director}"); } Console.ReadKey(); } } public class MovieLister { private MovieFinder finder; public MovieLister() { finder = new ColonDelimitedMovieFinder("movie.txt"); } public List<Movie> MoviesDirectedBy(string arg) { var allMovies = finder.findAll(); var list2 =new List<Movie>(); foreach (var m in allMovies) { if(m.director == arg) { list2.Add(new Movie() { movieName = m.movieName, director = m.director }); } } return list2; } } public class ColonDelimitedMovieFinder: MovieFinder { private string fnamePath = ""; public ColonDelimitedMovieFinder(string name) { this.fnamePath = name; } public List<Movie> findAll() { var list = new List<Movie>(); var txt= File.ReadAllText(this.fnamePath).Split(new string[] { "\n" },StringSplitOptions.RemoveEmptyEntries); foreach(var m in txt) { var ary = m.Split(','); if (ary.Length == 2) { list.Add(new Movie() { movieName = ary[0].Trim(), director = ary[1].Trim() }); } } return list; } } public class Movie { /// <summary> /// 影片名 /// </summary> public string movieName { get; set; } /// <summary> /// 导演 /// </summary> public string director { get; set; } } public interface MovieFinder { List<Movie> findAll(); } } /* movie.txt 星球大战,乔治·卢卡斯 教父,弗朗西斯·福特·科波拉 肖申克的救赎,弗兰克·德拉邦特 阿甘正传,罗伯特·泽米吉斯 楚门的世界,彼得·威尔 泰坦尼克号,詹姆斯卡梅隆 罗马假日,威廉·惠勒 黑暗骑士,克里斯托弗·诺兰 疯狂原始人,埃米尔·库斯图里卡 辛德勒的名单,史蒂文·斯皮尔伯格 侏罗纪公园,史蒂文·斯皮尔伯格 夺宝奇兵,史蒂文·斯皮尔伯格 拯救大兵瑞恩,史蒂文·斯皮尔伯格 */
(二)控制反转
using Autofac; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication7 { class Program { static void Main(string[] args) { var builder = new ContainerBuilder(); builder.RegisterType<ColonDelimitedMovieFinder>().As<IMovieFinder>().UsingConstructor(typeof(string)); var container = builder.Build(); using (var ioc = container.BeginLifetimeScope()) { var service = ioc.Resolve<IMovieFinder>(new NamedParameter("name","movie.txt")); var movie = new MovieLister(service); var list = movie.MoviesDirectedBy("史蒂文·斯皮尔伯格"); foreach (var m in list) { Console.WriteLine($"{m.movieName}\t{m.director}"); } } Console.ReadKey(); } } public class MovieLister { private IMovieFinder finder; public MovieLister(IMovieFinder _finder) { this.finder = _finder; } public List<Movie> MoviesDirectedBy(string arg) { var allMovies = finder.findAll(); var list2 = new List<Movie>(); foreach (var m in allMovies) { if (m.director == arg) { list2.Add(new Movie() { movieName = m.movieName, director = m.director }); } } return list2; } } public class ColonDelimitedMovieFinder : IMovieFinder { private string fnamePath = ""; public ColonDelimitedMovieFinder(string name) { this.fnamePath = name; } public List<Movie> findAll() { var list = new List<Movie>(); var txt = File.ReadAllText(this.fnamePath).Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (var m in txt) { var ary = m.Split(','); if (ary.Length == 2) { list.Add(new Movie() { movieName = ary[0].Trim(), director = ary[1].Trim() }); } } return list; } } public class Movie { /// <summary> /// 影片名 /// </summary> public string movieName { get; set; } /// <summary> /// 导演 /// </summary> public string director { get; set; } } public interface IMovieFinder { List<Movie> findAll(); } }
未完待续。。。
autoFac教程:
依赖注入和控制反转的使用
https://www.cnblogs.com/yanbigfeg/archive/2018/10/28/9855960.html
Autofac支持配置文件
https://www.cnblogs.com/yakniu/p/16282880.html
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

本帖最后由 勇哥,很想停止 于 2023-11-03 15:47:40 编辑 
