在Web服务应用程序要初始化的容器和填充其依赖,需要来自应用程序类型的不同方法暴露用户接口(例如Windows Forms, WPF, and ASP.NET Web Forms)。本主题描述了ASP.NET的Web服务(ASMX)可能的解决方案和资源,帮助您实现在WCF应用程序。
ASP.NET Web服务应用程序
ASP.NET Web服务应用程序可以部分的使用主题ASP.NET Web窗体应用程序中的方法。您可以添加类HttpApplicationState的扩展方法的创建和公开容器,代码添加到应用程序的Global.asax文件中添加代码将企业库扩展加到容器中。不过,由于有在ASMX应用中没有没有UI控件,您不能像ASP.NET Web窗体应用程序描述那样使用HTTP模块。
不过,你可以调用HttpContext.Current.Application.GetContainer()扩展方法访问容器。 你可以容器的引用通过当前类的BuildUp方法填充你通过属性定义的依赖。例如,下面的代码使用依赖注入,解决实现了ImyService接口的类的实例,并使用它来计算UseDataService方法返回的值。
view plaincopy to clipboardprint?
01.using System.Web;
02.
03.public class MyWebService : System.Web.Services.WebService
04.{
05. private IMyService theService;
06.
07. public MyWebService()
08. {
09. // Pass this class through the container using the BuildUp method
10. HttpContext.Current.Application.GetContainer().BuildUp(this);
11. }
12.
13. [Dependency]
14. public IMyService DataService
15. {
16. get { return theService; }
17. set { theService = value; }
18. }
19.
20. [WebMethod]
21. public string UseDataService()
22. {
23. return "The value you require is " + theService.DoSomething();
24. }
25.}
作为选择,你可以使用ASP.NET Web窗体应用程序中的展示的基本方法,创建并组装在Application字典对象中的容器,然后再需要的时候通过你的web方法来访问它。
WCF应用程序
在WCF中你可以使用与此主题中描述的基本方针类似的技术。然而,在WCF中没有存储的HttpApplication状态。代替的方法,你可以使用具有InstanceContextMode 的InstanceContext ,它被设为单例,并适用于所有的请求。你必须通过实现Iextension接口创建的InstanceContext的自定义扩展。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sfbirp/archive/2010/05/25/5621452.aspx