【发布时间】:2018-09-13 11:32:26
【问题描述】:
考虑以下代码:
public interface IFileBackup
{
Task Backup(byte[] file);
}
public class BackUpMechanismA : IFileBackup
{
//Implementation
public async Task Backup(byte[] file)
{
//Attempts to backup using mechanism A
}
}
public class BackUpMechanismB : IFileBackup
{
//Implementation
public async Task Backup(byte[] file)
{
//Attempts to backup using mechanism B
}
}
那么调用类是这样的:
public class Caller
{
private readonly IFileBackup _backupA;
private readonly IFileBackup _backupB;
public Caller(IFileBackup backupA, IFileBackup backupB)
{
_backupA = backupA;
_backupB = backupB;
}
public async Task BackupFile(byte[] file)
{
try
{
await _backupA.Backup(file);
}
catch(SomeException)
{
await _backupB.Backup(file);
}
}
}
所以我在这里尝试做的是使用多态性。所以BackupMechanismA 和BackupMechanismB 都以自己的方式实现了Backup 方法。在调用者中,我想尝试第一种机制,如果这不起作用,我们会捕获异常并尝试第二种方法。
我无法使用Autofac 解决正确的实现。我试过了:
builder.RegisterType<BackupMechanismA>().As<IFileBackup>().AsSelf();
builder.RegisterType<BackupMechanismB>().As<IFileBackUp>().AsSelf();
但这不起作用,因为我仍然需要告诉调用者要解析哪种类型。我该如何在调用者中做到这一点?
另外,我怀疑这种设计是否真的是合适的设计。在此设计之前,我只有一个具有两种不同方法的类,一种用于机制 A,一种用于机制 B,然后调用者将在 try catch 中调用不同的方法。所以我想重构它,因为这个类变得非常大,我想将两种不同的机制分离到它们自己的类中。
那么,我可以使用 Autofac 解决这个问题吗?对于这种情况,它的设计是否正确?
【问题讨论】:
-
你找到答案了吗?
-
@Jogge 是的,但我改变了我的设计,所以我没有使用多态性。我接受了我认为最好的答案
标签: c# oop polymorphism autofac