通过WCF简化IOC容器的使用

通过WCF简化IOC容器的使用,wcf,iis,dependency-injection,inversion-of-control,ioc-container,Wcf,Iis,Dependency Injection,Inversion Of Control,Ioc Container,在after-after中,任何关于与IIS一起使用IOC容器(Unity、Windsor等)的讨论都涉及到创建自定义ServiceHostFactory和自定义ServiceHost 我能看到的唯一原因是,定制服务行为,以及与IInstanceProvider相关的负载,可以应用于所有服务。所以我想弄明白为什么整个事情没有通过一个。这种配置允许将自定义行为应用于所有服务,而无需使用自定义ServiceHostFactory和自定义服务主机 也就是说,我能想象需要定制服务主机的唯一原因是,如果定

在after-after中,任何关于与IIS一起使用IOC容器(Unity、Windsor等)的讨论都涉及到创建自定义ServiceHostFactory和自定义ServiceHost

我能看到的唯一原因是,定制服务行为,以及与IInstanceProvider相关的负载,可以应用于所有服务。所以我想弄明白为什么整个事情没有通过一个。这种配置允许将自定义行为应用于所有服务,而无需使用自定义ServiceHostFactory和自定义服务主机

也就是说,我能想象需要定制服务主机的唯一原因是,如果定制IInstanceProvider与每个WCF实例或上下文实例一起循环使用。当然,我希望每次启动IIS ServiceHost时只建立一次IOC容器绑定,而不是重复或不定期地建立

如果我的定制IInstanceProvider确实偶尔被回收,那么我可以将我的IOC容器放入定制服务主机中,以确保它能够尽可能长时间地存在

但是,如果我的自定义IInstanceProvider的使用时间与内置服务主机的使用时间一样长,那么为什么不跳过自定义服务主机工厂和自定义服务主机呢


事实上,再进一步说,如果我将IOC容器放入自定义IInstanceProvider的静态成员中,那么IInstanceProvider是否被不规则地回收就无关紧要了。这是一个完整的循环:为什么我需要或想要自定义ServiceHostFactory和自定义ServiceHost将IOC容器与WCF一起使用?

有趣的问题!我能想到这样做的唯一原因是,你不想用永远不会改变的项目(即WCF服务使用的IoC容器)把app.config弄得乱七八糟。我试图将app.config的使用限制在终端用户/开发人员可能希望在不重新编译的情况下更改的内容上(在大多数情况下,不会太多)。这使得它更具可读性,并且通常更容易以编程方式指定配置,因为与配置文件相比,程序代码中更好地支持intellisense和编译时检查


但是,此参数可能不适用于您链接到的第一篇文章,因为他们实际上是通过app.config设置IoC容器的。因此,在这种情况下,这可能是一种双重标准。我从未真正理解人们为什么要通过外部配置文件来设置所有依赖项。在大多数情况下,将静态配置存储在app.config中对我来说似乎有些过分

嗯。这是因为大多数IoC/WCF集成(如)所做的不仅仅是创建服务(使用其依赖项)

定制使用寿命/处置

当请求结束时,一切都应该得到适当的清理。您的服务和IoC类使用不同的生命周期

仅借助
InstanceProvider
,无法检测到请求的结束

i合同行为/IServiceBehavior


您可以在容器中注册行为并将其添加到您的WCF服务中。

就个人而言,我非常喜欢使用一种不需要任何
ServiceHostFactory
ServiceHost
ServiceBehavior
的设计,和
InstanceProvider
组合,您不必在.svc文件中注册工厂。我喜欢我的WCF服务,因为它只是消息传递体系结构之上的一个非常薄的层,这样可以避免您使用这种WCF集成的东西。您可以阅读更多有关此类设计的信息