现在的位置: 主页 > 公司荣誉 > 文章正文

ASP.NET MVC 控制器(二)

作者:陕西芙爱尔婚庆礼仪服务有限公司 来源:www.fair521.com 未知发布时间:2017-09-11 14:38:45
ASP.NET MVC 控制器(二) 前言

在之前的篇幅中,用文字和图像来表示了控制器的激活过程,描述的角度都是从框架默认实现的角度去进行描述的,这样也使得大家都可以清楚的知道激活的过程以及其中涉及到的对象模型,今天的篇幅就是在激活的过程中,框架提供了哪些可注入点,站在一个使用者的角度来进行描述。

就从默认控制器工厂的实现来看,在CreateController()方法中,通过GetControllerType()方法来获取控制器类型(Type),然后传递到GetControllerInstance()方法中,通过其中的实现来完成根据控制器类型(Type)到IController的生成。而在后续的注入点也是在GetControllerInstance()方法实现中来进行注入的,专题系统,GetControllerInstance()方法即是整个控制器激活过程的入口点。

IoC示例

既然说到了动态注入,想必就要用到IoC框架了,在MVC学前篇中提到过Ninject的使用,下面这个示例便是依赖于Ninject的来做的演示:

复制代码

1 /// <summary>

2 /// 产品实体类

3 /// </summary>

4 public class Product

5 {

6 public string ID { get; set; }

7 public string Name { get; set; }

8 }

复制代码

定义一个数据实体类没什么好说的,

复制代码

1 /// <summary>

2 /// 抽象数据提取库

3 /// </summary>

4 public interface IDataStandard

5 {

6 List<Product> GetProducts();

7 }

8 /// <summary>

9 /// 默认实现--数据提取库

10 /// </summary>

11 public class DataProvide : IDataStandard

12 {

13

14 public List<Product> GetProducts()

15 {

16 List<Product> products = new List<Product>()

17 {

18 new Product(){ ID="1",Name="name1"},

19 new Product(){ID="2",Name="name2"},

20 new Product(){ID="3",Name="name3"}

21 };

22 return products;

23 }

24 }

复制代码

这里定义的一个是抽象的数据提取库,和一个默认的实现作为演示用于提供数据用的。

复制代码

1 /// <summary>

2 /// 抽象数据调用

3 /// </summary>

4 public interface IDataCall

5 {

6 void WriterToMonitor();

7 }

8

9 /// <summary>

10 /// 默认的数据调用实现

11 /// </summary>

12 public class DefultDataCall:IDataCall

13 {

14 private IDataStandard _DataStandard;

15

16 public DefultDataCall(IDataStandard dataStandard)//使用构造函数方式注入 通过Ninject框架实现

17 {

18 _DataStandard = dataStandard;

19 }

20

21 public void WriterToMonitor()

22 {

23 foreach(var data in _DataStandard.GetProducts())

24 {

25 Console.WriteLine("Prodcut ID:" + data.ID + " Name:" + data.Name);

26 }

27 }

28 }

复制代码

这里定义的是抽象的数据调用和默认的实现,我们现在要做的就是通过IoC框架来让调用客户端对数据调用和数据提取解耦,

复制代码

1 class Program

2 {

3 static void Main(string[] args)

4 {

5 IKernel ninject = new StandardKernel();

6 ninject.Bind<IDataStandard>().To<DataProvide>();

7 IDataCall dataCall = ninject.Get(typeof(DefultDataCall)) as IDataCall;

8 if (dataCall != null)

9 {

10 dataCall.WriterToMonitor();

11 }

12

13 Console.ReadLine();

14 }

15 }

复制代码

运行这段代码:

很简单明了的一个示例,在MVC的项目中也是这样运行的。

MVC项目中的运用

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉建网站公司 http://www.45qun.com

上一篇:python-偷取bing首页面图片作为桌面背景 下一篇:最后一页