gpt4 book ai didi

StructureMap: "No default instance of plugin defined"- 尽管它是

转载 作者:行者123 更新时间:2023-12-01 13:06:40 25 4
gpt4 key购买 nike

我已经使用 StructureMap 大约 6 个月了;你会认为它会开始变得更容易。好像没有。

这是我注册表的第一行:

            For<IDbConnection>()
.Singleton()
.Use<SqlConnection>()
.Ctor<string>(WebConfigurationManager.ConnectionStrings["UnifiedConnectionString"].ConnectionString);

它编译并运行。但是当我尝试使用该界面时,如下所示:

            return MsSqlConfiguration.MsSql2008.ConnectionString(((DbConnection)ObjectFactory.GetInstance<IDbConnection>()).ConnectionString);

我明白了

StructureMap Exception Code:  202
No Default Instance defined for PluginFamily System.Data.IDbConnection, System.Data,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

现在我可能遗漏了一些东西(好吧,我显然遗漏了一些东西),但我不知道在定义 IDbConnection 的默认实例方面我还能清楚多少。我做错了什么?

编辑:根据 Joshua 的要求,我正在为最小案例添加完整代码。

我尝试创建一个重现错误的控制台应用程序。它最终没有复制它,而是给出了一个不同的 SM 异常,我也不明白。但也许当我理解了那个,我就会对生产应用程序中发生的事情有一个线索。

首先,我的控制台应用程序:

       static void Main(string[] args)
{
Debug.Print("Connection String: {0}", ConfigurationManager.ConnectionStrings["UnifiedConnectionString"].ConnectionString);
(new Bootstrapper()).BootstrapStructureMap();

}

然后,我的 Bootstrapper 模块,从生产应用程序中提取:

    public class Bootstrapper : IBootstrapper
{
public void BootstrapStructureMap()
{
ObjectFactory.Initialize(x =>

x.Scan(s =>
{
s.WithDefaultConventions();
s.TheCallingAssembly();
s.LookForRegistries();
}
)
);
Debug.Print(ObjectFactory.WhatDoIHave());
try
{
ObjectFactory.AssertConfigurationIsValid();
}
catch (StructureMapConfigurationException ex)
{
string msg = ex.ToString();
throw;
}
catch (Exception ex)
{
string msg = ex.ToString();
throw;
}
InitAutoMapper();
}

最后,DependencyRegistry,从生产应用中提取出来,但第一条语句以外的所有内容都被注释掉了。

    public class DependencyRegistry : Registry
{
public DependencyRegistry()
{
For<IDbConnection>()
.Singleton()
.Use<SqlConnection>()
.Ctor<string>(ConfigurationManager.ConnectionStrings["UnifiedConnectionString"].ConnectionString);
//For<...
}
}

现在当我运行它时我得到的是它通过“WhatDoIHave()”,但它在 AssertConfigurationIsValid() 上抛出 SM 205 异常。错误(显然)发生在尝试实例化 SqlConnection 时,提示“InstanceKey 缺少请求的实例属性\"connectionString\"。

消息正文如下:

StructureMap.Exceptions.StructureMapConfigurationException:

实例“a54d3ca1-33b5-4100-82d4-13e458f57a3f”上的构建错误(已配置的 System.Data.SqlClient.SqlConnection 实例,System.Data,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089) 对于插件类型 System.Data.IDbConnection,System.Data,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089

StructureMap.StructureMapException:StructureMap 异常代码:205InstanceKey“a54d3ca1-33b5-4100-82d4-13e458f57a3f”缺少请求的实例属性“connectionString” 在 StructureMap.Pipeline.ConstructorInstance.<.ctor>b__0(字符串键) 在 StructureMap.Util.Cache2.get_Item(KEY 键)
在 StructureMap.Pipeline.ConstructorInstance.Get(字符串属性名称,类型 pluginType,BuildSession session )
在 StructureMap.Pipeline.ConstructorInstance.Get[T](String propertyName, BuildSession session)
在 StructureMap.Pipeline.Arguments.Get[T](String propertyName)
在 lambda_method(ExecutionScope , IArguments )
在 StructureMap.Construction.BuilderCompiler.FuncCompiler
1.<>c__DisplayClass2.b__0(IArguments args)

...(希望没有删除与空间相关的内容)...

StructureMap 失败:1 次构建/配置失败和 0 次验证错误

在 StructureMap.Container.AssertConfigurationIsValid() 在 StructureMap.ObjectFactory.AssertConfigurationIsValid() 在 U:\dave\VS2008Projects\FMSWeb\FMSWeb\ConsoleIoCTest\Bootstrapper.cs 中的 ConsoleIoCTest.Bootstrapper.BootstrapStructureMap(): 第 29 行

明白了吗?我也不知道。当我将它作为 .ctor 参数传递时,为什么它说它缺少构造函数键“connectionString”?

谢谢,很抱歉占用了所有空间。

最佳答案

我认为你的问题是你错过了 Ctor 依赖指令的“是部分”。

For<IDbConnection>()
.Singleton()
.Use<SqlConnection>()
.Ctor<string>().Is(theConnectionString);

关于StructureMap: "No default instance of plugin defined"- 尽管它是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2588784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com