2010-10-19 71 views
1

Castle Windsor是否支持将setter注入应用于现有服务实例?我有一种情况,我无法控制某些类实例的创建,而我确实需要解析它们的依赖关系。这排除了构造函数的注入,但为setter注入打开了大门,因为我可以在创建新实例后立即拦截新实例。我知道Castle Windsor支持setter注入开箱即用,我只是不知道它是否可能(如果是这样:如何)在没有使用Resolve方法的情况下明确利用它。Castle Windsor现有服务实例上的Setter注入

我知道在StructureMap中可以使用ObjectFactory.BuildUp这种方法,这样我就可以在温莎城堡找到相应的东西。

如果你想知道,我正在ASP.NET WebForms的页面中应用依赖注入,提供了一个自定义PageHandlerFactory。我不想沿着尝试创建页面处理程序的路径走,我应该将其留给PageHandlerFactory类中的基本实现。

public class CustomPageHandlerFactory : PageHandlerFactory 
{ 
    public override IHttpHandler GetHandler(HttpContext context, string requestType, string virtualPath, string path) 
    { 
     IHttpHandler handler = base.GetHandler(context, requestType, virtualPath, path); 
     Page page = handler as Page; 

     if (page == null) 
     { 
      return handler; 
     } 

     // Resolve dependencies using setter injection... 

     return page; 
    } 
} 

回答

1

参见本文的底部:

http://www.jeremyskinner.co.uk/2008/11/08/dependency-injection-with-aspnet-mvc-action-filters/

杰里米提供了用于实现属性注射温莎集装箱的扩展方法。

+0

谢谢。提供的代码实现了注入,而不是将其留给Windsor,并且由于反射代码和没有缓存机制而不是非常高效。尽管如此,我仍将它作为临时解决方案放入我的代码库中,直到我拥有更优雅的解决方案。 – 2010-10-19 12:07:41

1

Castle Windsor是否支持将setter注入应用于现有服务实例?

编号查看FAQ的基本原理。

我申请依赖注入在ASP.NET的WebForms页,

this question

+0

我明白了。我正在考虑编写一个使用惰性组件加载器来执行setter注入的工具。我知道这一切都有点臭,但我认为这是使用ASP.NET WebForms时不可避免的。 – 2010-10-19 14:03:14

1

查看Neal Shawn的ASpNetWindsorModule

+0

谢谢,该模块非常整洁! – 2010-10-26 08:19:45

+0

我只是希望它支持用户控件的setter注入。 – 2010-10-26 11:14:23

+1

它支持。只有当你自己使用LoadControl()时,它才会工作OOTB。 – roelofb 2010-10-26 11:42:56

相关问题