如何使用 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/