Der einfachste Weg besteht darin, stattdessen eine Factory zu verwenden, da der ASP.NET Core IoC Container keine benannten Abhängigkeiten unterstützt oder einen IoC-Container eines Drittanbieters verwendet, der dies unterstützt.
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>();
}
}
dann die IFileContainerFactory
in Ihrem Controller injizieren.
Eine Alternative ist Ihre Schnittstellen mit einem Marker-Schnittstelle markieren und registrieren/injizieren diese
// It defines no new methods or properties, just inherits it and acts as marker
public interface IFsFileContainer : IFileContainer {}
public interface IFtpFileContainer : IFileContainer {}
public class FsFileContainer : IFsFileContainer
{
...
}
in Startup.cs
services.AddTransient<IFsFileContainer, IFileContainer>();
services.AddTransient<IFtpFileContainer, IFileContainer>();
Bitte, MVC6-Tags nicht mehr verwenden. Es ist für eine zukünftige Version von ASP.NET MVC basierend auf dem alten Webstack (MVC5). ASP.NET Core ist eine komplett neue und inkompatible, portable Version, die auf .NET Core basiert. Verwenden Sie stattdessen Tags [tag: asp.net-core-mvc] und/oder [tag: asp.net-core] und Ihre Frage wird eher von Leuten gefunden, die Ihnen bei dem Problem helfen können. Zweitens, benutze keinen dnx mehr, es wird nicht mehr entwickelt. Die neuen Versionen funktionieren nur mit der Toolkette dotnet-cli, die Sie hier finden https://www.microsoft.com/net/core#windows. Upgrade auf 1.0 RTM so schnell wie möglich – Tseng