Asp.net web api 如何添加可用作类型参数的依赖项';TImpl&x27;温莎城堡?

Asp.net web api 如何添加可用作类型参数的依赖项';TImpl&x27;温莎城堡?,asp.net-web-api,dependency-injection,castle-windsor,ioc-container,dependency-resolver,Asp.net Web Api,Dependency Injection,Castle Windsor,Ioc Container,Dependency Resolver,我使用特定的URL获取此运行时异常: 缺少依赖项。组件NRBQ.Web.Controllers.DeliveryController对SeaStore.Data.Legacy.Interfaces.INRBQDeliveryRepository有依赖项,无法解析。请确保该依赖项在容器中作为服务正确注册,或作为内联参数提供 例外类型:“Castle.MicroKernel.Resolvers.DependencyResolvexException” …因此我在IOC类中添加了以下代码(基于有效的现

我使用特定的URL获取此运行时异常:

缺少依赖项。组件NRBQ.Web.Controllers.DeliveryController对SeaStore.Data.Legacy.Interfaces.INRBQDeliveryRepository有依赖项,无法解析。请确保该依赖项在容器中作为服务正确注册,或作为内联参数提供 例外类型:“Castle.MicroKernel.Resolvers.DependencyResolvexException”

…因此我在IOC类中添加了以下代码(基于有效的现有代码):

_container.Register
     (Component
    .For<INRBQDeliveryRepository>()
    .ImplementedBy<DeliveryController>()
    .LifeStyle.Transient);
…然后是NRBQ中的中间一个。客户端:

namespace NRBQ.Client
{
    public class RESTNRBQDelivery : INRBQDelivery
    {
        INRBQClientSettings NRBQClientSettings;
        IRESTAPIClient RESTAPIClient;

        public RESTNRBQDelivery(IRESTAPIClient RESTAPIClient, INRBQClientSettings NRBQClientSettings)
        {
            this.NRBQClientSettings = NRBQClientSettings;
            this.RESTAPIClient = RESTAPIClient;
        }

        public RESTNRBQDelivery(IRESTAPIClient RESTAPIClient, INRBQClientSettings NRBQClientSettings, AuthenticationHeaderValue AuthHeader)
        {
            this.NRBQClientSettings = NRBQClientSettings;
            this.RESTAPIClient = RESTAPIClient;
            this.RESTAPIClient.AuthHeader = AuthHeader;
        }

        public int GetCount()
        {
            throw new NotImplementedException(); //TODO: Implement
        }
…最后一个真正在幕后进行繁重工作的人,在NRBQ.API中:

namespace NRBQ.API.Controllers
{
    public class DeliveryController : ApiController
    {
        ILogger Logger;
        INRBQService NRBQService;

        public DeliveryController(ILogger Logger, INRBQService NRBQService)
        {
            this.NRBQService = NRBQService;
            this.Logger = Logger;
        }

        [HttpGet]
        [Route("api/Deliveries/Count")] 
        public int GetCountOfDeliveryRecords()
        {
            //return _deliveryRepository.GetCount();
            return NRBQService.GetNRBQEntity();
        }
最后一个电话是指:

public int GetNRBQEntity()
{
    return 17; // Bogus val for now
}
这一切都是我复制现有测试/示例代码的最佳尝试,但我承认我的头脑在游动,我并不真正了解发生了什么(如何以及为什么)

更新2 虽然我很确定它还不是内森的热狗(它似乎在整个创作中追逐自己,先称这个抽象,然后称那个抽象,然后称另一个抽象,然后再回到第一个抽象,然后再回到第二个抽象,等等,等等,无限的,无休止的),补充说:

container.Register
 (Component
 .For<INRBQDelivery>()
 .ImplementedBy<RESTNRBQDelivery>()
 .LifeStyle.Transient);
container.Register
(组成部分
.对于()
.由()实施
(生活方式,短暂),;
…在上下文中:

public class NRBQClientInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register
         (Component
         .For<SeaStore.Common.HTTP.IRESTAPIClient>()
         .ImplementedBy<SeaStore.Common.HTTP.WebAPIClient>()
         .LifeStyle.Transient);

        container.Register
         (Component
         .For<INRBQClient>()
         .ImplementedBy<RESTNRBQClient>()
         .LifeStyle.Transient);

        container.Register
         (Component
         .For<INRBQDelivery>()
         .ImplementedBy<RESTNRBQDelivery>()
         .LifeStyle.Transient);
    }
}
公共类NRBQClientInstaller:IWindsorInstaller
{
public void安装(IWindsorContainer、IConfigurationStore)
{
集装箱。登记
(组成部分
.对于()
.由()实施
(生活方式,短暂),;
集装箱。登记
(组成部分
.对于()
.由()实施
(生活方式,短暂),;
集装箱。登记
(组成部分
.对于()
.由()实施
(生活方式,短暂),;
}
}

…删除了err msg并返回了我所期望的假结果(或者更确切地说,是期望的,不是真正期望的结果)。

在IWindsorInstaller单元中,注册接口及其实现者:

container.Register
 (Component
 .For<INRBQDelivery>()
 .ImplementedBy<RESTNRBQDelivery>()
 .LifeStyle.Transient);
container.Register
(组成部分
.对于()
.由()实施
(生活方式,短暂),;

你确定DeliveryController实现了INRBQDeliveryRepository吗?@JonathonRossi这听起来是最可能的原因;仔细检查您导入的名称空间是否不包含类似名称的ClasseStanks@samy我试图使用Windsor,但遇到错误,类型“ClassLibrary1.Dependency1”不能用作泛型类型或方法中的类型参数“TImpl”'Castle.MicroKernel.Registration.ComponentRegistration.ImplementedBy()'。没有从“ClassLibrary1.Dependency1”到“CastleWindsorExample.IDependency1”的隐式引用转换。发现我在两个项目中都有IDependency1接口
public class NRBQClientInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register
         (Component
         .For<SeaStore.Common.HTTP.IRESTAPIClient>()
         .ImplementedBy<SeaStore.Common.HTTP.WebAPIClient>()
         .LifeStyle.Transient);

        container.Register
         (Component
         .For<INRBQClient>()
         .ImplementedBy<RESTNRBQClient>()
         .LifeStyle.Transient);

        container.Register
         (Component
         .For<INRBQDelivery>()
         .ImplementedBy<RESTNRBQDelivery>()
         .LifeStyle.Transient);
    }
}
container.Register
 (Component
 .For<INRBQDelivery>()
 .ImplementedBy<RESTNRBQDelivery>()
 .LifeStyle.Transient);