.Net Core 学习(二)上篇

用Visual Studio和ASP.NET Core MVC创建Web API

1.启动Visual Studio。从文件菜单,选择新建>项目。选择ASP.NET Core Web Application(.Net Core)项目模板。项目命名为NetCoreApp.点击确认。如图

如果没有找到项目模板。Visual Studio 2015下载地址:https://www.visualstudio.com/products/visual-studio-community-vs  或者安装Update 5.具体根据你所使用的编译器版本下载。推荐网站:http://www.itellyou.cn/

在新弹出的对话框中,选择Web API模板,点击确定。这样一个项目就算是建好了。

2.添加模型类。在解决方案浏览器中,右击项目。选择

添加>新建文件夹。把文件夹命名为Models。在新建的Models文件夹里添加一个TodoItem类。在TodoItem类里定义字段。

3.添加仓储类。repository类包含了获取数据并映射到实体模型类的业务逻辑。在本例中不使用数据库。在此运用了依赖注入,面向接口编程的思想。

先添加一个名为ITodorepository的接口。代码如下:

接口主要定义了基本的CRUD操作。C(Create),R(Retrieve),U(Update),D(Delete)。

下一步,添加一个ITodoRepository接口的Repository类,用来实现接口。代码如下:

4. 注册仓储。为了注入repository到Controller,必须注册DI(Dependency Injection)。打开Startup.cs文件,在ConfigureServices添加如下代码:

相关概念补习,快上车....

什么是依赖注入?

依赖注入不是目的,它是一些列工具和手段,最终的目的是帮我们开发出松散耦合(loose coupled)。可维护,可测试的代码和程序。

依赖注入(Dependency Injection),是这样一个过程:由于某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行。

看完这定义感觉有点云里雾里。在Stack Overflow上面有一个问题,如何向一个5岁的小孩解释依赖注入,其中得分最高的一个答案是:

“When you go and get things out of the refrigerator for yourself, you can cause problems. You might leave the door open, you might get something Mommy or Daddy doesn’t want you to have. You might even be looking for something we don’t even have or which has expired.

What you should be doing is stating a need, “I need something to drink with lunch,” and then we will make sure you have something when you sit down to eat.”

翻译过来就是:5岁小孩应该依赖家长来提供必要的服务。不用自己去做那些自己做起来费劲的事,你要做的就是提出需求,然后等待。肚子饿需要吃东西,不需要亲自买菜,洗菜,烧饭.....(具体的服务),只需要告诉家长,家长会提供这一切服务(外界实例化服务)。

依赖注入的方式:

1.Setter注入。指在客户类中,设置一个服务类接口类型的数据成员,并设置一个Set方法作为注入点,这个Set方法接受一个具体的服务类实例为参数,并将它赋给服务类接口类型的数据成员。

例如:

2.构造注入:在客户类中,设置一个服务类接口类型的数据成员,并以构造函数为注入点,这个构造函数接受一个具体的服务类实例为参数,并将它赋给服务类接口类型的数据成员。例如:

唯一的变化就是构造函数取代了Set_ServiceImpl方法。成了注入点。

3.依赖注入:指在系统中提供一个获取点,客户类仍然依赖服务类的接口。当客户类需要服务类时,从获取点主动取得指定的服务类,具体的服务类类型由获取点的配置决定。(具体略)

传送门:http://www.cnblogs.com/xcodevs/p/5584858.html

原文地址:https://www.cnblogs.com/xcodevs/p/5584218.html