程序到接口而不是实现混淆

Wil*_*lky 1 c# oop interface

我试图养成编码到接口而不是实现的习惯,而在大多数情况下,我可以看到有一些我努力的原因.

拿这个非常简单的例子:

public interface IAuditLog
{
    void AddLog(string log);
}

public class AuditLog : IAuditLog
{
    public void AddLog(string log)
    {
        //implementation
    }
}
Run Code Online (Sandbox Code Playgroud)

要调用审计日志类:

public partial class AuditLogPage : System.Web.UI.Page
{
    protected void btnAddLog_Click(object sender, EventArgs e)
    {
        IAuditLog objAuditLog = new AuditLog();
        objAuditLog.AddLog("test log");
    }
}
Run Code Online (Sandbox Code Playgroud)

在实例化时我仍然需要使用AuditLog,那么重点是什么?如果AddLog方法签名发生变化,我仍然需要浏览所有使用它的页面并修改代码.我错过了这一点吗?

感谢任何提前帮助,威尔基.

Kan*_*ane 5

在示例中,如果您FileAuditLogger()使用DatabaseAuditLogger()或者EventLogAuditLogger()可以切换实现而无需重写代码.

通常,您使用IoC容器(Autofac,StructureMap,Unity等)自动连接对象实例.所以不要打电话给new AuditLog()你打电话IoC.Container.Resolve<IAuditLog>()

如果您想了解更多信息,请与我们联系.