我知道可以使用DependancyResolver并将Castle Windsor注册到MVC但是由于/sf/answers/342245571/中描述的问题,我们坚持使用我们的MVC项目上的WindsorControllerFactory实现方法.
然而,看起来ApiControllers正在使用其他类型的工厂,因为Castle Windsor无法注入依赖项.
有没有人想出如何使用Castle Windsor与ASP.NET Web API和MVC而不使用DependencyResolver?
我无法使用asp.net web api配置Windsor Container,尽管它与常规控制器(IController)配合良好.
我在同一个项目中有常规控制器和api控制器.
这是常规控制器的代码,工作正常:
/// <summary>
/// Controller Factory class for instantiating controllers using the Windsor IoC container.
/// </summary>
public class WindsorControllerActivator : IControllerActivator
{
private readonly IWindsorContainer container;
public WindsorControllerActivator(IWindsorContainer container)
{
this.container = container;
}
public IController Create(RequestContext requestContext, Type controllerType)
{
var controller = (IController)container.GetService(controllerType);
return controller;
}
}
Run Code Online (Sandbox Code Playgroud)
在global.asax.cs中
container.Register(Component.For<IWindsorContainer>().Instance(container));
container.Register(Component.For<IControllerActivator>().ImplementedBy<WindsorControllerActivator>());
Run Code Online (Sandbox Code Playgroud)
以下是有问题的代码:
public class WindsorApiControllerActivator : IHttpControllerActivator
{
private readonly IWindsorContainer container;
public WindsorApiControllerActivator(IWindsorContainer container)
{
this.container = container;
}
public IHttpController Create(HttpRequestMessage …Run Code Online (Sandbox Code Playgroud) asp.net-mvc castle-windsor ioc-container asp.net-mvc-4 asp.net-web-api
我决定清理这篇文章,并在ge.tt/3EwoZEd/v/0?c上发布了一个示例项目
已经花费了大约30个小时,但仍然无法弄明白...帮助真的很感激!
我有一个使用此代码的ASP.NET Web API解决方案:http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-message-handlers/来实现"Basic"使用消息处理程序在ASP.NET Web API中进行HTTP身份验证".我是IoC/DI的新手,我正试图让它与Castle Windsor合作.
我一直在尝试很多不同的东西但是我得到以下错误之一取决于我做错了什么:
以下是我的代码:
的Global.asax.cs:
private static IWindsorContainer _container;
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
var config = (CustomErrorsSection)ConfigurationManager.GetSection("system.web/customErrors");
IncludeErrorDetailPolicy errorDetailPolicy;
switch (config.Mode)
{
case CustomErrorsMode.RemoteOnly:
errorDetailPolicy
= IncludeErrorDetailPolicy.LocalOnly;
break;
case CustomErrorsMode.On:
errorDetailPolicy
= IncludeErrorDetailPolicy.Never;
break;
case CustomErrorsMode.Off:
errorDetailPolicy
= IncludeErrorDetailPolicy.Always;
break;
default:
throw new ArgumentOutOfRangeException();
}
GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = errorDetailPolicy;
ConfigureWindsor(GlobalConfiguration.Configuration);
GlobalConfiguration.Configuration.MessageHandlers.Add(new BasicAuthMessageHandler()
{
PrincipalProvider = _container.Resolve<IProvidePrincipal>()
});
}
public static …Run Code Online (Sandbox Code Playgroud) c# asp.net dependency-injection castle-windsor inversion-of-control