勇哥注:
主要是阅读时的代码由java转为C#。
(一)简单示例
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
星球大战,乔治·卢卡斯
教父,弗朗西斯·福特·科波拉
肖申克的救赎,弗兰克·德拉邦特
阿甘正传,罗伯特·泽米吉斯
楚门的世界,彼得·威尔
泰坦尼克号,詹姆斯卡梅隆
罗马假日,威廉·惠勒
黑暗骑士,克里斯托弗·诺兰
疯狂原始人,埃米尔·库斯图里卡
辛德勒的名单,史蒂文·斯皮尔伯格
侏罗纪公园,史蒂文·斯皮尔伯格
夺宝奇兵,史蒂文·斯皮尔伯格
拯救大兵瑞恩,史蒂文·斯皮尔伯格
*/
(二)控制反转
C#
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 编辑 
