考虑以下代码:
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 解决这个问题吗?对于这种情况,它是正确的设计吗?
函数式编程
绝地无双
慕桂英3389331
红糖糍粑
随时随地看视频慕课网APP
相关分类