• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Ninject之旅之十四:Ninject在ASP.NET Web Form程序上的应用(附程序下载) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

摘要

ASP.NET Web Forms没有像MVC那样的可扩展性,也不可能使它创建UI页面支持没有构造函数的的激活方式。这个Web Forms应用程序的的局限性阻止了它使用构造函数注入模式,但是仍能够使用其他的DI模式,例如初始化方法模式。

下面使用一个具体的ASP.NET Web Forms应用程序使用Ninject例子来说明怎样在ASP.NET Web Forms上使用Ninject。

程序下载

1. 在解决方案Demo.Northwind内,创建MVC工程Demo.Northwind.MVC。

2. 添加引用。

使用NutGet Manager添加引用:

添加Demo.Northwind.Core工程的引用。

3. 修改根路径下的Web.config文件。

添加connectionStrings节。

  <connectionStrings>
    <add name="NorthwindContext" providerName="System.Data.SqlClient" connectionString="Data Source=localhost;Initial Catalog=NORTHWND;Integrated Security=True" />
  </connectionStrings>

4. 修改Ninject配置。

展开App_Start文件夹,发现自动添加了NinjectWeb.cs代码文件和NinjectWebCommon.cs代码文件。

NinjectWeb.cs文件不用修改,它是一个静态类,有一个静态函数Start。

1         public static void Start() 
2         {
3             DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
4         }

这将NinjectHttpModule注入到Http请求流程中。

NinjectWebCommon.cs文件内容跟在ASP.NET MVC上使用Ninject的NinjectWebCommon.cs一样。

查看他的CreateKernel方法和RegisterServices方法:

 1         private static IKernel CreateKernel()
 2         {
 3             var kernel = new StandardKernel();
 4             try
 5             {
 6                 kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
 7                 kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
 8 
 9                 RegisterServices(kernel);
10                 return kernel;
11             }
12             catch
13             {
14                 kernel.Dispose();
15                 throw;
16             }
17         }
18 
19         /// <summary>
20         /// Load your modules or register your services here!
21         /// </summary>
22         /// <param name="kernel">The kernel.</param>
23         private static void RegisterServices(IKernel kernel)
24         {
25 }

修改RegisterServices方法,添加DI代码:

1             kernel.Bind(x => x.FromAssembliesMatching("Demo.Northwind.*")
2                   .SelectAllClasses().EndingWith("Repository")
3                   .BindAllInterfaces());

5. 修改Default.aspx,添加一个GridView。

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Demo.Northwind.Webforms._Default" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <div class="row">
        <asp:GridView ID="customersGridView" runat="server"></asp:GridView>
    </div>
</asp:Content>

6. 修改Default.aspxa.cs代码。

 1 using Demo.Northwind.Core.Interface;
 2 using Demo.Northwind.Core.Model;
 3 using System;
 4 using System.Linq;
 5 using System.Web.UI;
 6 
 7 namespace Demo.Northwind.Webforms
 8 {
 9     public partial class _Default : Page
10     {
11         private ICustomerRepository repository;
12 
13         [Ninject.Inject]
14         public void Setup(ICustomerRepository customerRepository)
15         {
16             if (customerRepository == null)
17             {
18                 throw new ArgumentNullException("customerRepository");
19             }
20             this.repository = customerRepository;
21         }
22 
23         protected void Page_Load(object sender, EventArgs e)
24         {
25             var customers = repository.GetAll();
26             customersGridView.DataSource = customers.ToList<Customer>();
27             customersGridView.DataBind();
28         }
29     }
30 }

接口ICustomerRepository通过Setup方法的参数注入,而不是通过构造函数参数注入。这是因为ASP.NET Web Forms UI引擎不能够用默认构造函数初始化UI元素。这个Setup方法在页面对象创建的时候被调用,使得它的参数被解析和被注入。

运行程序,得到执行结果:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
asp.net页生命周期发布时间:2022-07-10
下一篇:
ASP.net防止SQL注入方法发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap