加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 无法使用Windsor Container将依赖项注入Asp.net

发布时间:2020-12-16 07:45:47 所属栏目:asp.Net 来源:网络整理
导读:我无法使用asp.net web api配置Windsor Container,尽管它与常规控制器(IController)配合良好. 我在同一个项目中有常规控制器和api控制器. 这是常规控制器的代码,工作正常: /// summary /// Controller Factory class for instantiating controllers using t
我无法使用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;
        }

}

在global.asax.cs中

container.Register(Component.For<IWindsorContainer>().Instance(container));
  container.Register(Component.For<IControllerActivator>().ImplementedBy<WindsorControllerActivator>());

以下是有问题的代码:

public class WindsorApiControllerActivator : IHttpControllerActivator 
    {
        private readonly IWindsorContainer container;
        public WindsorApiControllerActivator(IWindsorContainer container)
        {
            this.container = container;
        }
        public IHttpController Create(HttpRequestMessage request,HttpControllerDescriptor controllerDescriptor,Type controllerType)
        {
            var controller = (IHttpController)container.GetService(controllerType);
            return controller;
        }
    }

和安装人员:

container.Register(Component.For<IHttpControllerActivator>().ImplementedBy<WindsorApiControllerActivator>());

但是,我永远无法执行WindsorApiControllerActivator.

什么时候,我把调试器放在WindsorControllerActivator中它按预期工作,但对于WindsorApiControllerActivator它永远不会被执行.

你的帮助将不胜感激

解决方法

我在global.asax.cs中添加了以下代码,它的工作原理:)

_windsorContainer = new WindsorContainer();
    _windsorContainer.Install(new EventSorbetInstaller());
    DependencyResolver.SetResolver(new WindsorDependencyResolver(_windsorContainer));
   ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(_windsorContainer));
   RegisterFilterProviders(FilterProviders.Providers,_windsorContainer);

  var activator = _windsorContainer.Resolve<IHttpControllerActivator>();

   GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator),activator);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读