在我的混合解决方案 (C++/.NET) 中,我想将 Log4Net 的 ILog 实例传递给 C++ 对象(以统一整个解决方案的日志记录)。
我想写一个 C++ 接口(LogInterface),然后在 C++/CLI 项目中实现一个托管到非托管的适配器,但问题是非托管适配器将无法存储指向托管 ILog 的字段实例。
是否有一种优雅、安全且高效的方式来实现这一点(除了将托管引用存储在静态缓存中)?
class UnmanagedLogAdapter :
public LogInterface
{
public:
UnmanagedLogAdapter(log4net::ILog^ log);
virtual bool IsInfoEnabled(void) const override
{
return m_log->IsInfoEnabled();
}
virtual void Info(const std::wstring& message) override
{
log4net::ILog^ log = m_log; // alternative that I want to avoid: log = StaticCache::Find(m_logId);
log->Info(gcnew System::String(message.cstr()));
}
private:
log4net::ILog^ m_log; //TODO: a managed field is forbidden
};