【问题标题】:WCF Castle Windsor and WASWCF 温莎城堡和 WAS
【发布时间】:2009-08-14 16:11:05
【问题描述】:

我有一个托管在 WAS 中的服务。我正在尝试使用依赖项注入此服务,但一直无法找到在哪里执行此操作。在 IIS 中托管的 WCF 服务中,您可以使用 application_onstart 事件来实例化城堡容器,但这在我的场景中不可用。所以,我正在尝试像这样创建一个自定义主机工厂:

public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
        {
            container = new WindsorContainer();
            container.Register(Component.For<IMyDependency>().ImplementedBy<MyDependency>());
            DefaultServiceHostFactory.RegisterContainer(container.Kernel);

            var service = container.Resolve(constructorString);
            ServiceHost serviceHost = new ServiceHost(service, baseAddresses);

            return serviceHost;
        }

这适用于单例 WCF 服务,但是如何让它适用于每次调用?对于非单例服务,它期望将类型传递给 ServiceHost 构造函数,而不是实际的服务。但是,如果我这样做,那么当服务启动时,它只会查找无参数构造函数,而不是 DI 版本。

关于如何让这一切正常工作的任何想法?

谢谢

【问题讨论】:

    标签: .net wcf castle-windsor


    【解决方案1】:

    WCF Facility 会为您做到这一点(以及更多)。

    【讨论】:

    • 谢谢,我之前在 IIS 中激活了 WCF 工具,但 WCF 服务未激活。过去,我只是简单地将服务连接到 Wcf 工厂,然后在 global.asax 中添加容器。但是,我无法将 global.asax 中的容器与 WAS 连接起来,那么您将如何将它们放在一起呢?
    • 答案是挂钩 AppInitialize() 谢谢
    • 酷,很高兴你成功了。如果您对 Castle 有任何疑问,最好在讨论列表中提问:groups.google.com/group/castle-project-users
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多