c# - 如何在 ASP.net Core 2 中使用 Windsor IoC

标签 c# dependency-injection asp.net-core-2.0 castle-windsor ioc-container

如何使用 CaSTLe Windsor 作为 IOC 而不是默认的 .net 核心 IOC 容器?

我构建了一个服务解析器,它依赖于 WindsorContainer 来解析服务。

类似于:

public class ServiceResolver
{
    private static WindsorContainer container;
    public ServiceResolver()
    {
        container = new WindsorContainer();
        // a method to register components in container
        RegisterComponents(container);
    }

    public IList<T> ResolveAll<T>()
    {
        return container.ResolveAll<T>().ToList();
    }
}

无法弄清楚如何让我的 .net core 2 web API 使用此解析器来替代 IServiceCollection。

最佳答案

对于其他人引用除了Nkosi提供的解决方案。

有一个名为 Castle.Windsor.MsDependencyInjection 的 nuget 包这将为您提供以下方法:

WindsorRegistrationHelper.CreateServiceProvider(WindsorContainer,IServiceCollection);

它的返回类型是 IServiceProvider,您不需要创建自己的包装器。

所以解决方案是这样的:

public class ServiceResolver{    
    private static WindsorContainer container;
    private static IServiceProvider serviceProvider;

    public ServiceResolver(IServiceCollection services) {
        container = new WindsorContainer();
        //Register your components in container
        //then
        serviceProvider = WindsorRegistrationHelper.CreateServiceProvider(container, services);
    }

    public IServiceProvider GetServiceProvider() {
        return serviceProvider;
    }    
}

并且在启动...

public IServiceProvider ConfigureServices(IServiceCollection services) {
    services.AddMvc();
    // Add other framework services

    // Add custom provider
    var container = new ServiceResolver(services).GetServiceProvider();
    return container;
}

关于c# - 如何在 ASP.net Core 2 中使用 Windsor IoC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47672614/

相关文章:

c# - ASP.Net Core 2 如何在身份验证后触发/调用代码

c# - 基于两个 vector3 完美定位对象?

c# - 为什么 C# (4.0) 不允许通用类类型中的协变和逆变?

c# - 在处理插件时,可以从组合根之外的 DI 容器解析吗?

c# - IServiceCollection 不包含 AddQuartz 的定义

asp.net-core-2.0 - ASP.NET Core 授权 : Combining OR requirements

c# - 在 .Net 中是否可以在编译时有条件地隐藏属性?

c# - Grouped TreeView 中的 WPF ListView 不起作用

java - @ComponentScan basePackageClasses 有命名约定吗?

spring - 资源不适用于范围原型(prototype)?