昨天,我写了一篇文章(参见:ASP.NET MVC 依赖注入),这种实现方式我个人一直感觉不太顺,在写出来与大家一起分享的同时,
也是想让大家提提自己的建议, 今天下载了微软发布的最新的 ASP.NET MVC3 Beta 版,同时也仔细阅读了它的 Release Notes,
让我感觉到惊喜的是,MVC3增加了对依赖注入的支持,增加了一个IDependencyResolver 接口定义,真的是很不错,比起我原来的实现要顺畅很多,
还是老方法,上微软牛人们的博客逛一圈看看有没有已经写好的代码,有就拿来用之,没有就只能自己写了,结果让我很失望,也可能是我太笨,
我没有找到一个完整的示例,只有一些代码片断,于是,我将其整理了一翻,也有一点点个人的心得,拿出来,与大家分享一下,
如遇高人请不吝赐教,下面是代码片断。
1、实现 MVC3 Beta 中提供的依赖注入接口IDependencyResolver
,MyDependencyResolver.cs 的代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Mvc;
usingMicrosoft.Practices.Unity;
namespaceDemo
{
publicclassMyDependencyResolver:IDependencyResolver
{
#regionIDependencyResolver成员
///<summary>
///依赖注入容器
///</summary>
privateUnityContainer_unityContainer;
///<summary>
///构造
///</summary>
///<paramname="aUnityContainer">依赖注入容器</param>
publicMyDependencyResolver(UnityContaineraUnityContainer)
{
_unityContainer=aUnityContainer;
}
publicobjectGetService(TypeaServiceType)
{
try
{
return_unityContainer.Resolve(aServiceType);
}
catch
{
///按微软的要求,此方法,在没有解析到任何对象的情况下,必须返回null,必须这么做!!!!
returnnull;
}
}
publicIEnumerable<object>GetServices(TypeaServiceType)
{
try
{
return_unityContainer.ResolveAll(aServiceType);
}
catch
{
///按微软的要求,此方法,在没有解析到任何对象的情况下,必须返回空集合,必须这么做!!!!
returnnewList<object>();
}
}
#endregion
}
}
2、在 Global.asax.cs 中设置依赖注入解析器 DependencyResolver (这是一个全局静态类,也是 MVC3 Beta 新增的):
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Mvc;
usingSystem.Web.Routing;
usingMicrosoft.Practices.Unity;
namespaceDemo
{
//Note:ForinstructionsonenablingIIS6orIIS7classicmode,
//visithttp://go.microsoft.com/?LinkId=9394801
publicclassMvcApplication:System.Web.HttpApplication
{
publicstaticvoidRegisterGlobalFilters(GlobalFilterCollectionfilters)
{
filters.Add(newHandleErrorAttribute());
}
publicstaticvoidRegisterRoutes(RouteCollectionroutes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",//Routename
"{controller}/{action}/{id}",//URLwithparameters
new{controller="Home",action="Index",id=UrlParameter.Optional}
);
}
protectedvoidApplication_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
//设置依赖注入
RegisterDependency();
}
privatestaticUnityContainer_Container;
publicstaticUnityContainerContainer
{
get
{
if(_Container==null)
{
_Container=newUnityContainer();
}
return_Container;
}
}
protectedvoidRegisterDependency()
{
Container.RegisterType<ITest,Test>();
DependencyResolver.SetResolver(newMyDependencyResolver(Container));
}
}
}
3、Controller的代码,HomeController.cs:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Mvc;
usingMicrosoft.Practices.Unity;
namespaceDemo.Controllers
{
publicclassHomeController:Controller
{
[Dependency]
publicITestTest{get;set;}
publicActionResultIndex()
{
ViewModel.Message=Test.GetString();
returnView();
}
publicActionResultAbout()
{
returnView();
}
}
}
4、ITest.cs代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceDemo
{
publicinterfaceITest
{
stringGetString();
}
}
5、Test.cs代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
namespaceDemo
{
publicclassTest:ITest
{
#regionITest成员
publicstringGetString()
{
return"Rundemo!";
}
#endregion
}
}
***** 注意,这篇文章只适用于 ASP.NET MVC3 Beta 版,将来正式版出来了,未必采用这种方式来实现,毕竟对于依赖注入这块,
从 MVC1 -> MVC3 Preview1 -> MVC3 Beta 一直都在变化,微软牛人(Brad Wilson)在自己的博客中也多次提到:
Disclaimer
This blog post talks about ASP.NET MVC 3 Beta, which is a pre-release version. Specific technical details may change before the final release
of MVC 3.
This release is designed to elicit feedback on features with enough time to make meaningful changes before MVC 3 ships,
so please comment on this blog post orcontact
meif you have comments.
(参见原文:http://bradwilson.typepad.com/blog/2010/10/service-location-pt5-idependencyresolver.html)
在下 e 文太差,我就不丢人了,e 文好的自己看吧。
这里是采用Unity依赖注入框架的完整示例:下载(环境:VS2010 + MVC3 Beta + Unity)
这里是采用Ninject依赖注入框架的完整示例:下载(环境:VS2010 + MVC3 Beta + Ninject)
分享到:
相关推荐
四、[ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject 五、[ASP.NET MVC 小牛之路]05 - 使用 Ninject 六、[ASP.NET MVC 小牛之路]06 - 使用 Entity Framework 七、[ASP.NET MVC 小牛之路]07 - URL Routing 八、...
Pro ASP.NET MVC 3 Framework 3rd Edition的源码 03 - First MVC App 04 - The MVC Pattern 05 - Essential Language Features 06 - Essential Tools 07 - 09 SportsStore 10 - Overview of MVC Projects 11 - URLs...
【ASP.NET编程知识】ASP.NET MVC使用Ninject的方法教程.docx
YQBlog - 基于Asp.Net MVC3 EF4.0技术的个人博客系统。 网站结构: 权限:.net membership 文章分类:category.js(json格式存储) 文章内容:表 blog_article,blog_articledetail 以及 视图 blog_varticle ...
ASP.Net MVC4 Ninject 依赖注入
在ASP.NET Web API和ASP.NET Web MVC中使用Ninject,
主要给大家介绍了关于ASP.NET MVC使用Ninject的相关资料,文中通过示例代码介绍的非常详细,对大家啊的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
在学习asp.netmvc的时候要用到一个DI 容器,其非常简单优雅并且很实用。但是中文教程不多。本人在博客园中看到这个文章感觉写的不错就下载整理了一下。希望对大家有所帮助,同时也非常感谢原作者。
到此这篇关于创建一个ASP.NET MVC 5项目的文章就介绍到这了,更多相关ASP.NET MVC5 项目内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网! 您可能感兴趣的文章:ASP.NET MVC5...
MVC.net + IOC(Ninject) 的示例源码,比较简单,适合IOC的入门学习。
itera-virtual-book-library 使用 EntityFramework 6.0 beta、OWIN、Ninject、NLog 和各种其他框架的 ASP.NET MVC 5 应用程序。 这是我在 2013 年为 Itera 编写的一个简单项目,用于培训目的。 背后的源代码 。
Ninject是一个快如闪电、超轻量级的基于.Net平台的依赖注入框架。它能够帮助你把应用程序分离成一个个松耦合、高内聚的模块,然后用一种灵活的方式组装起来。通过使用Ninject配套你的软件架构,那么代码将会变得更加...
ASP.NET MVC(版本5) 实体框架 Ninject 自动映射器 运行项目 使用Visual Studio打开项目。 在web.config文件中,根据您的系统更改连接字符串。 <connectionString><add name="ClinicDB" connectionString=...
### Mvc4DDD项目 该项目已准备好运行,并带有一个已填充的数据库(MSSQL)。 第一个版本将下载NuGet软件包,然后,该应用程序将运行...Ninject(依赖注入器) #####// 去做: 创建最终用户界面; 写一些评论;
该资源使用vs2017编写的一个关于如何使用Ninject进行依赖注入的事例,具体的说明步骤可以参考博客:https://blog.csdn.net/liudexin1985?t=1&orderby=UpdateTime
[Packt Publishing] 精通 Ninject 依赖注入 (英文版) [Packt Publishing] Mastering Ninject for Dependency Injection (E-Book) ☆ 图书概要:☆ Learn how Ninject facilitates the implementation of ...
通过学习如何在MVC5中使用Ninject框架,编写的示例代码
使用Ninject作为IoC容器构建一个简单的ASP.NET MVC博客应用程序。 源代码已在DNC杂志第01期中进行了说明。该杂志是完全免费的,您可以在此处获得 作者:Sumit Maitra 推特: 日期:2012年7月 版本:0.0.1 网站...
在这一节里我们引入一个依赖注入的工具Ninject.点击安装修改HomeController为如下代码这样我们就不需要暴露属性了,修改对应的单元测试为如下图所示。测试顺利通过但是,当我们运行程序时出错了,因为MVC在实例化...