如何在ObjectFactory.Initialize调用StructureMap中使用命名实例?
|
我正在尝试执行以下引导程序:
x.For(Of IErrorLogger).Use(Of ErrorLogger.SQLErrorLogger)().
Ctor(Of IErrorLogger)(\"backupErrorLogger\").Is(ObjectFactory.GetNamedInstance(Of IErrorLogger)(\"Disk\"))
x.For(Of IErrorLogger).Add(
Function()
Return New ErrorLogger.DiskErrorLogger(
CreateErrorFileName(ServerMapPath(GetAppSetting(\"ErrorLogFolder\"))))
End Function).Named(\"Disk\")
但它显示此错误:
StructureMap异常代码:200
找不到名为\“ Disk \”的PluginType Logging.IErrorLogger实例
我有点理解为什么会这样。.问题是,如何在注册表中利用命名实例?也许像SQLErrorLogger的ctor参数的惰性初始化一样?我不确定如何实现它。
在此先感谢您提供的任何帮助。
没有找到相关结果
已邀请:
2 个回复
春驹晴陪
注意,对于Ctor的Is方法,我们需要提供一个func(IContext),并使用IContext.ConstructedBy(Func())调用ObjectFactory.Get ...在这种情况下成功注册IErrorLogger。 据我所知,这是唯一的方法。其他的Icontext方法(例如IsThis和Instance)仅适用于已注册的类型。
薄扩络拜
函数提供一个lambda。尝试解析注册的类型时,将评估lambda。
免责声明:我不是完全了解VB.NET中的lambda语法,但我希望我做对了。 编辑: 我在发布前尝试过的有效C#版本是这样的: