首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >IoC:城堡温莎和WebAPI

IoC:城堡温莎和WebAPI
EN

Stack Overflow用户
提问于 2013-04-23 02:56:00
回答 2查看 23.2K关注 0票数 22

我有一个使用Castle Windsor的MVC4站点,我想向其中添加一些WebAPI调用,因此我开始在interwebs上搜索一些内容。

现在,我对IoC的细节一无所知;我遵循了一个教程,了解如何在我的项目中设置Castle Windsor,将IUnitOfWorkFactoryIApplicationService作为公共属性注入到一个基本控制器中,并根据需要在控制器构造函数中插入一些其他接口。它运行得很顺利,所以我从来没有用过更多的东西。

每当我在读WebAPI的时候,我都被告知DI在使用Castle Windsor时不会工作得很好,谈论着IDependencyResolverIDependencyScope的问题。有几种解决方法和实现可以解决这个问题,但我不清楚的是问题到底是什么。其中包含了代码片段,但前提是您知道它们属于哪个类,以及它们是如何调用的,不幸的是,我不知道。此外,我在网上看到的所有示例都引用了独占的WebAPI项目,而不是明智地添加了几个ApiController的MVC4项目。我不知道这是否会对任何事情产生影响。

为什么我的标准控制器不能与API控制器一起工作?要让WebAPI调用和标准web调用在同一个应用程序中工作,需要做什么代码杂技?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-23 11:50:47

要在webapi中使用Windsor,请遵循http://blog.ploeh.dk/2012/10/03/DependencyInjectioninASP.NETWebAPIwithCastleWindsor/ (BEH:固定链接)

另请阅读Castle Windsor/DelegatingHandler/IPrincipal Dependency Injection (DI)/Inversion of Control (IoC) in ASP.NET Web API

你可以在同一个应用程序中使用webapi和MVC控制器(我更喜欢将其分开),但是路由和控制器工厂是不同的,你必须设置两个不同的配置并处理路由重叠……对于MVC和Windsor,你可以找到一个很棒的

票数 12
EN

Stack Overflow用户

发布于 2018-08-12 16:54:47

首先,正如Iko所说的,您需要创建一个实现IHttpControllerActivator的类。

然后在Bootstrap()ContainerBootstrapper中添加以下内容,用实现的替换缺省值:

代码语言:javascript
复制
 //This will help in creating Web api with Dependency injection
 GlobalConfiguration.Configuration.Services.Replace(
 typeof(IHttpControllerActivator),
 new WindsorCompositionRoot(container));

最后,这里没有提到,如果没有它,你应该在install()内实现的IWindsorInstaller服务中添加以下内容:

代码语言:javascript
复制
container.Register(
    Classes.FromThisAssembly()
    .BasedOn<ApiController>()
    .LifestyleTransient()    
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16154566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档