Castle Windsor Ms Adapter Core 2.0实施

Ben*_*Ben 4 c# dependency-injection castle-windsor asp.net-core

有人可以根据这里提供的Halil Kalkan(@hikalkan)的指示进行扩展:https://github.com/volosoft/castle-windsor-ms-adapter

ORIGINAL - 使用标准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>();
    }
Run Code Online (Sandbox Code Playgroud)

新 - 不起作用.试图使用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);
    }
Run Code Online (Sandbox Code Playgroud)

我收到错误:

尝试激活时,无法解析类型'... Repositories.Buildings.IBuildingRepository'的服务... Controllers.BuildingController'

我的最终目标是不必为我创建的每个存储库提供DI.我希望Castle Windsor按照惯例去DI它.如果还有其他选择为.Net Core 2.0做这个,那么我也对这些选项持开放态度.

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

Ste*_*ven 5

我建议不要使用这种适配器.在新的.NET Core DI抽象之上创建一个好的(完全兼容的)适配器已经证明对于大多数DI容器来说是一项非常简单的任务.有些容器与微软建立DI容器的方式根本不兼容,Castle Windsor就是一个很好的例子.

Castle Windsor维护者已经尝试了相当长的一段时间来构建这样的适配器,但即使在咨询了微软之后,微软承认(复制)Castle Windsor与MS如何看待容器世界是不相容的.

城堡不是唯一属于此类别的容器.简单注入器,Ninject,Unity和StructureMap等包含已被证明与新的.NET Core DI抽象不兼容.虽然StructureMap实际上有一个适配器,但它们的适配器与抽象不是100%兼容,当ASP.NET Core框架或第三方库开始依赖于这种不兼容的行为时,这可能会导致问题.甚至对于带有适配器的其他容器,如Autofac和LightInject,其适配器的问题似乎也会不断出现,这证明(IMO)底层模型存在缺陷.

因此,在这个时刻存在的温莎城堡不兼容适配器和温莎城堡的维护者并没有尚未决定是否应该,甚至可以适应.

但是兼容适配器的缺失根本不是问题.温莎(和其他容器),可以很方便地与ASP.NET核心集成在不使用的适配器,因为fir3pho3nixx在温莎论坛指出这里.在它的基础知识中,只需几行代码即可运行.

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