如何使用CodeDOM/T4/PostSharp /等用c#自动创建(例如)单例?

Tar*_*Tar 5 c# design-patterns metaprogramming boilerplate

我正在寻找一种自动生成(例如)的方法singleton,如:

[SingletonPatternAttribute]
public class Logger {
    public void Log (string txt) { /* do logging... */ }
}
Run Code Online (Sandbox Code Playgroud)

作为消除样板的尝试.

有人知道如何实现吗?我知道有CodeDOM,Reflection.Emit,T4等.此外 - (最值得注意的是)PostSharp,但我很高兴看到上述挑战的真正解决方案.

例如,我可以在构造函数中执行代码生成,但编译时间显然要好得多.

编辑:

这里的问题不是Singleton,而是生成/元编程C#- 如何以最佳方式创建代码/消除样板 - 有什么样的具体例子?

Adr*_*ips 2

我为我的日志记录类做了同样的事情,使用 IOC 容器并在映射/绑定对象时添加范围。例如使用 Ninject,绑定将是:

Bind<ILogger>().To<Logger>().InSingletonScope();
Run Code Online (Sandbox Code Playgroud)

然后在我想使用单例记录器的类中,我可以使用属性注入:

[Inject]
public ILogger Logger { get; set; }
Run Code Online (Sandbox Code Playgroud)