最简单的方法是使用工厂,因为ASP.NET Core IoC容器不支持命名依赖性或使用支持它的第三方IoC容器。
public class FileContainerFactory : IFileContainerFactory
{
private readonly IServiceProvider provider;
public class FileContainerFactory(IServiceProvider provider)
{
this.provider = provider;
}
public IFileContainer CreateFileSystemContainer()
{
// resolve it via built in IoC
return provider.GetService<FsFileContainer>();
}
public IFileContainer CreateFtpContainer()
{
// resolve it via built in IoC
return provider.GetService<FtpFileContainer>();
}
}
然后将IFileContainerFactory
注入您的控制器。
另一种方法是用一个标记接口来标记你的接口和寄存器/在Startup.cs
services.AddTransient<IFsFileContainer, IFileContainer>();
services.AddTransient<IFtpFileContainer, IFileContainer>();
请注入这些
,不使用MVC6标签了。它适用于基于旧webstack(MVC5)的ASP.NET MVC的未来版本。 ASP.NET Core是一个基于.NET Core的全新且不兼容的可移植版本。使用[tag:asp.net-core-mvc]和/或[tag:asp.net-core]标签代替,您的问题更有可能由可以帮助您解决问题的人员找到。其次,不要再使用dnx,它不再被开发。新版本仅适用于https://www.microsoft.com/net/core#windows中的dotnet-cli工具链。尽快升级到1.0 RTM – Tseng