在温莎城堡的现有服务实例上安装注入

时间:2010-10-19 08:39:36

标签: c# .net dependency-injection castle-windsor

Castle Windsor是否支持将setter注入应用于现有服务实例?我有一个案例,我无法控制某些类实例的创建,而我需要解决它们的依赖关系。这排除了构造函数注入,但是因为我可以在创建它们之后立即拦截新实例,因此可以打开安装程序注入的大门。

我知道Castle Windsor支持setter注入开箱即用,我只是不知道它是否可能(如果是这样的话)如何在不使用Resolve方法的情况下明确地利用它。

我也知道在StructureMap中可以使用ObjectFactory.BuildUp方法进行这样的事情,这样我就可以在Castle Windsor找到一个等价物了。

如果您想知道,我正在将依赖注入应用于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;
    }
}

3 个答案:

答案 0 :(得分:1)

请参阅本文的底部:

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

Jeremy为Windsor Container提供了一种实现属性注入的扩展方法。

答案 1 :(得分:1)

  

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

没有。查看FAQ了解原理。

  

我正在将依赖注入应用于ASP.NET WebForms中的页面,

请参阅this question

答案 2 :(得分:1)

查看Neal Shawn的ASpNetWindsorModule