C# 记录器使用的存储提供程序类中的依赖项注入
我正在编写我的自定义日志并注入一个日志存储。我需要记录对此存储的请求。问题在于,这将是记录器和存储器之间的循环引用。在这种情况下,是否有办法提供松耦合 Smth是这样的:C# 记录器使用的存储提供程序类中的依赖项注入,c#,logging,dependency-injection,ninject,C#,Logging,Dependency Injection,Ninject,我正在编写我的自定义日志并注入一个日志存储。我需要记录对此存储的请求。问题在于,这将是记录器和存储器之间的循环引用。在这种情况下,是否有办法提供松耦合 Smth是这样的: public interface ILogger{ void Log(String msg); } public interface IStorage{ void Save(String msg); } public class MyLogger:ILogger{ private IStorage
public interface ILogger{
void Log(String msg);
}
public interface IStorage{
void Save(String msg);
}
public class MyLogger:ILogger{
private IStorage _storage;
public MyLogger(IStorage storage){
_storage = storage;
}
public void Log(String msg){
_storage.Save(msg);
}
}
public class MyStorage:IStorage{
private ILogger _log;
public MyStorage(ILogger logger){
_log = logger
}
public void Save(String msg){
_log.Log(msg);
//....
//send msg to a database like SQL, MongoDB, Cassandra or anything
}
}
public class MyNinjectModule : NinjectModule
{
public override void Load()
{
Kernel.Bind<ILogger>().To<MyLogger>();
Kernel.Bind<IStorage>().To<MyStorage>();
}
}
你可以通过财产注入来解决这个问题,但是你希望它如何工作呢?调用IStorage.Save或ILogger.Log将由于循环调用而导致StackOverflowException崩溃。属性注入没有帮助-我尝试过。和btw属性在ctor之后初始化。这正是问题所在——如果您可以删除其中一个类中的构造函数依赖关系,我不知道谁来解决此designProperty注入中的循环引用。但是StackOverflowException是肯定的。我不确定我是否理解你为什么这么做?您有一个存储类来持久化日志消息,但它不仅存储消息,而且还会再次记录日志?你失去了我。