Предположим, у меня есть несколько реализаций интерфейса. Каждая реализация имеет свои собственные зависимости. Как мы можем получить правильный? Правильная реализация должна быть выбрана во время выполнения. Во время выполнения необходимо установить некоторые свойства.
Теперь у нас есть следующее, работающее с AutoFac, но в новом проекте мы его больше не используем. Теперь мы не можем заставить UploaderFactory работать.
Если у кого-то есть лучшее решение, дайте мне знать!
// Interface with multiple implementations
public interface IFileUploader
{
Task UploadAsync(string filePath);
}
// Dependency interface for a particular implementation
public interface IDependencyA
{
}
// Dependency interface for another implementation
public interface IAnotherDependency
{
}
public class FileUploaderA: IFileUploader
{
public delegate FileUploaderA Factory(SomeStuff properties);
private readonly SomeStuff _properties;
private readonly IDependencyA _dependencyA;
public FileUploaderA(SomeStuff properties, IDependencyA dependencyA)
{
_properties = properties;
_dependencyA = dependencyA;
}
public Task UploadAsync(string filePath)
{
// Upload file and use properties and dependencies
throw new NotImplementedException();
}
}
public class FileUploaderB : IFileUploader
{
public delegate FileUploaderB Factory(SomeStuff properties);
private readonly SomeStuff _properties;
private readonly IAnotherDependency _anotherDependency;
public FileUploaderB(SomeStuff properties, IAnotherDependency anotherDependency)
{
_properties = properties;
_anotherDependency = anotherDependency;
}
public Task UploadAsync(string filePath)
{
// Upload file and use properties and dependencies
throw new NotImplementedException();
}
}
public interface IUploaderFactory
{
IFileUploader Create(bool condition, SomeStuff someStuff);
}
public class UploaderFactory : IUploaderFactory
{
private readonly FileUploaderA.Factory _fileUploaderA;
private readonly FileUploaderB.Factory _fileUploaderB;
// This injection doesn't work!!!
public UploaderFactory(FileUploaderA.Factory fileUploaderA, FileUploaderB.Factory fileUploaderB)
{
_fileUploaderA = fileUploaderA;
_fileUploaderB = fileUploaderB;
}
public IFileUploader Create(bool condition, SomeStuff someStuff)
{
if (condition == true)
{
// Get File uploader A
return _fileUploaderA(someStuff);
}
else
{
// Get File uploader B
return _fileUploaderB(someStuff);
}
}
}
public class SomeStuff()
{
public string A { get; set; }
public string B { get; set; }
}
Подробнее здесь: https://stackoverflow.com/questions/789 ... fferent-de
Как зарегистрировать несколько реализаций одного и того же интерфейса с разными зависимостями ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как зарегистрировать несколько реализаций одного и того же интерфейса с разными зависимостями
Anonymous » » в форуме C# - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как зарегистрировать несколько реализаций одного и того же интерфейса с разными зависимостями
Anonymous » » в форуме C# - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как зарегистрировать несколько реализаций интерфейса в ASP.NET Core без регистрации вручную?
Anonymous » » в форуме C# - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как зарегистрировать несколько реализаций интерфейса в ASP.NET Core без регистрации вручную?
Anonymous » » в форуме C# - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как зарегистрировать несколько реализаций интерфейса в ASP.NET Core без регистрации вручную?
Anonymous » » в форуме C# - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-