(Microsoft.Practices.EnterpriseLibrary.SemanticLogging) Inje



我最近在我的MVC 4应用程序中添加了带有SqlServer silk的Microsoft.Practices.EnterpriseLibrary.SemanticLogging(v6)。

var sqlListener = SqlDatabaseLog.CreateListener("SampleEventLogger",strConnection);
sqlListener.EnableEvents(BasicLogger.Log, EventLevel.LogAlways);

这是我的控制器中的代码

BasicLogger.Log.Critical("ERROR CRITICAL");

效果很好!

。现在障碍:)在我的MVC应用程序中,我使用Unity for DI,并注入构造函数ILogger接口。因为我需要使用我已注册到 Unity 容器中的相同引用(否则不起作用),所以我认为采用 RegisterType 可能是解决方案。

 var myRegistereType = container.Resolve<ILogger>();
 sqlListener.EnableEvents(myRegistereType, EventLevel.LogAlways);

但我收到错误

*已经有一个事件源的实例,其 GUID

XXX XXX XXX XXX *

有人知道吗?谢谢

事件源应该只有一个实例。 这就是为什么您通常会看到一个事件源公开一个单一实例(例如 BasicLogger.Log )。

如果您使用的是 Unity,则必须将事件源注册为单一实例,或使用导致返回一个实例的其他方法。 下面是使用 InjectionFactory 和 Log 属性执行此操作的一种方法:

IUnityContainer container = new UnityContainer();
container.RegisterType<ILogger>(
    new InjectionFactory(c => BasicLogger.Log));
var logger = container.Resolve<ILogger>();

相关内容

  • 没有找到相关文章

最新更新