相关疑难解决方法(0)

Castle Windsor ApiController工厂实现ASP.NET Web API

我知道可以使用DependancyResolver并将Castle Windsor注册到MVC但是由于/sf/answers/342245571/中描述的问题,我们坚持使用我们的MVC项目上的WindsorControllerFactory实现方法.

然而,看起来ApiControllers正在使用其他类型的工厂,因为Castle Windsor无法注入依赖项.

有没有人想出如何使用Castle Windsor与ASP.NET Web API和MVC而不使用DependencyResolver?

c# asp.net castle-windsor asp.net-mvc-3 asp.net-web-api

9
推荐指数
1
解决办法
9267
查看次数

无法使用Windsor Container将依赖项注入Asp.net MVC 4 Web API控制器

我无法使用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

5
推荐指数
1
解决办法
2502
查看次数

ASP.NET Web API中的Castle Windsor/DelegatingHandler/IPrincipal依赖注入(DI)/控制反转(IoC)

我决定清理这篇文章,并在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合作.

我一直在尝试很多不同的东西但是我得到以下错误之一取决于我做错了什么:

  • "看起来你忘了注册http模块Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule"
  • "你调用的对象是空的." 对于BasicAuthMessageHandler中的PrincipalProvider
  • "没有找到支持服务的组件*.DummyPrincipalProvider被发现"

以下是我的代码:


的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

4
推荐指数
1
解决办法
1万
查看次数