Castle Windsor Ms Adapter Core 2.0 实现

Castle Windsor Ms Adaptor Core 2.0 Implementation

有人可以扩展 Halil Kalkan (@hikalkan) 此处提供的方向:https://github.com/volosoft/castle-windsor-ms-adapter

原始 - 使用标准 Microsoft DI 工作

public void ConfigureServices(IServiceCollection services)
    {
        services.AddAutoMapper();
        services.AddMvc();
        services.AddApiVersioning();

        services.AddDbContextPool<CIDMSContext>(options => options.UseSqlServer(""));
        services.AddScoped<IBuildingRepository, BuildingRepository>();
        services.AddScoped<IComponentRepository, ComponentRepository>();
    }

新 - 不起作用。尝试使用 Castle.Windsor.MsDependencyInjection

public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        services.AddAutoMapper();
        services.AddMvc();
        services.AddApiVersioning();

        services.AddDbContextPool<CIDMSContext>(options => options.UseSqlServer(""));
        //services.AddScoped<IBuildingRepository, BuildingRepository>();
        //services.AddScoped<IComponentRepository, ComponentRepository>();

        return WindsorRegistrationHelper.CreateServiceProvider(
            new WindsorContainer(), services);
    }

我收到错误:

Unable to resolve service for type '...Repositories.Buildings.IBuildingRepository' while attempting to activate ...Controllers.BuildingController'

我的最终目标是不必对我创建的每个存储库进行 DI。我希望 Castle Windsor 按照惯例对它进行 DI。如果有其他选项可以为 .Net Core 2.0 执行此操作,那么我也对这些选项持开放态度。

我正在使用 Visual Studio 15.4.1 .Net Core 2.0 API 项目。

编辑: CastleWindsor - ASP.NET Core Facility

我建议不要使用此类适配器。在新的 .NET Core DI 抽象之上创建一个好的(完全兼容的)适配器已被证明对于大多数 DI 容器来说是一项远非微不足道的任务。有些容器与 Microsoft 构建其 DI 容器的方式根本不兼容,温莎城堡就是一个很好的例子。

Castle Windsor 维护者已尝试 for quite some time to build such an adapter, but even after consulting Microsoft about this, Microsoft acknowledged (copy) Castle Windsor 与 MS 对容器世界的看法不兼容。

Castle 并不是唯一属于此类的容器。 Simple Injector、Ninject、Unity 和 StructureMap 等包含已被证明与新的 .NET Core DI 抽象也不兼容。尽管 StructureMap 实际上有一个适配器,但它们的适配器并非与抽象 100% 兼容,当 ASP.NET 核心框架或第三方库开始依赖于该不兼容行为时,这显然会导致问题。甚至对于其他带有适配器的容器,如 Autofac 和 LightInject,它们的适配器问题似乎不断出现,这证明(IMO)底层模型存在缺陷。

所以此时此刻没有与温莎城堡兼容的适配器,温莎城堡的维护者还没有decided yet他们是否应该甚至可以适应.

但是缺少兼容的适配器根本不是问题。正如 fir3pho3nixx 在 Windsor 论坛 here 上所述,Windsor(和其他容器)可以很容易地与 ASP.NET Core 集成,而无需使用适配器。在它的基础上,只需几行代码就可以得到东西 运行.

更新: Windsor 现在有一个 ASP.NET Core 的设施(集成包),可以阅读 here 的文档。请注意,Windsor 维护者选择不创建适配器实现。该设施通过保持内置 DI 系统而不是更换它来工作。然而,从消费者的角度来看,该设施的运作方式并不那么有趣。