Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Castle Windsor中现有服务实例上的Setter注入_C#_.net_Dependency Injection_Castle Windsor - Fatal编程技术网

C# Castle Windsor中现有服务实例上的Setter注入

C# Castle Windsor中现有服务实例上的Setter注入,c#,.net,dependency-injection,castle-windsor,C#,.net,Dependency Injection,Castle Windsor,Castle Windsor是否支持对现有服务实例应用setter注入?我有一个例子,我无法控制某些类实例的创建,而我确实需要解决它们的依赖关系。这排除了构造函数注入,但为setter注入敞开了大门,因为我可以在创建新实例之后立即截获它们 我知道Castle Windsor支持开箱即用的setter注入,我只是不知道不使用Resolve方法是否有可能(如果有:如何)显式地利用它 我也知道,在StructureMap中,使用ObjectFactory.build方法也可以实现这一点,因此我希望在C

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

我知道Castle Windsor支持开箱即用的setter注入,我只是不知道不使用
Resolve
方法是否有可能(如果有:如何)显式地利用它

我也知道,在StructureMap中,使用
ObjectFactory.build
方法也可以实现这一点,因此我希望在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;
    }
}

请参阅本文底部:

Jeremy为实现属性注入的Windsor容器提供了一个扩展方法

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

不,请查看基本原理

我正在对ASP.NET WebForms中的页面应用依赖项注入


请参阅。

查看Neal Shawn的。

谢谢。所提供的代码实现了注入,而不是将其留给Windsor,并且由于反射代码和缓存机制的缺乏,性能不是很好。不过,我会将它作为一个临时解决方案粘贴到我的代码库中,直到我有一个更优雅的解决方案。我明白了。我正在考虑编写一个工具,它使用惰性组件加载程序来执行setter注入。我知道这有点难闻,但我认为当使用ASP.NET WebForms时,这是不可避免的。谢谢,这个模块真的很棒!我只希望它支持用户控件的setter注入。它确实支持这一点。只有当你自己使用LoadControl()时,它才不会工作。这确实是我正在使用的。包装
LoadControl
很快就能解决这个问题。