Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StructureMap覆盖默认记录器实例_C#_Components_Structuremap - Fatal编程技术网

C# StructureMap覆盖默认记录器实例

C# StructureMap覆盖默认记录器实例,c#,components,structuremap,C#,Components,Structuremap,我有两个项目 应用程序(WindosForms仅用作启动组件的UI) 组件 组件具有我通过StructureMap(注册表)注入的所有接口和默认实现。 在这个项目中,我为所有类(Log2Console)引入了一个日志和默认实现的接口,并向StructureMap注册 我需要的是,如果有人想使用自己的UI应用程序并删除默认应用程序,我希望组件DLL的用户可以用his覆盖默认的Log2Console,前提是hi实现his(例如,如果他在自己的项目中实现接口并通过StructureMap注册,则Log

我有两个项目

  • 应用程序(WindosForms仅用作启动组件的UI)

  • 组件

  • 组件具有我通过StructureMap(注册表)注入的所有接口和默认实现。 在这个项目中,我为所有类(Log2Console)引入了一个日志和默认实现的接口,并向StructureMap注册

    我需要的是,如果有人想使用自己的UI应用程序并删除默认应用程序,我希望组件DLL的用户可以用his覆盖默认的Log2Console,前提是hi实现his(例如,如果他在自己的项目中实现接口并通过StructureMap注册,则LogToDB覆盖Log2Console)


    对不起,我的英语不好

    实现这一点的方法是提供一个默认构造函数,该构造函数调用具有特定实现的另一个构造函数:

    public interface ILogger
    {
       void Log(string text);
    }
    
    public class ConsoleLogger
    {
       public void Log(string text) { Console.WriteLine(text); }
    }
    
    public class TraceWriter
    {
       private ILogger log;
    
       // Default behaviour
       public TraceWriter () : 
         this(new ConsoleLogger()) { }
    
       // User specified implementation
       public TraceWriter ( ILogger logger )
       {
          this.log = logger;
       }
    }
    
    我的回答假设您1)希望提供默认行为,2)允许用户在需要时提供特定行为