- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 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\"。
消息正文如下:
实例“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 键)
1.<>c__DisplayClass2.b__0(IArguments args)
在 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
...(希望没有删除与空间相关的内容)...
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/
我是一名优秀的程序员,十分优秀!