我有一个使用 StructureMap.MVC4 的 MVC4 应用程序。这是 IoC.cs 的片段
ObjectFactory.Initialize(x =>{
x.Scan(scan =>{
scan.TheCallingAssembly();
scan.WithDefaultConventions();});
x.For<IDbContext>().Use<EfDbContext>().Ctor<string>("connectionStringName").Is("DefaultDb");
x.For<IDatabase>().Use<Database>().Ctor<string>("connectionStringName").Is("DefaultDb");
x.For<IActionInvoker>().Use<InjectingActionInvoker>();
x.SetAllProperties(c=>c.OfType<IDbContext>());
... ...
DbContext 注入工作正常,ActionFilters 的 setter 注入以及所有使用默认约定的 Service:IService 也可以正常工作。但我在尝试注入 IDatabase 时遇到以下错误:
Could not find a constructor parameter or property for NPoco.Database, NPoco, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null named connectionStringName Parameter name: name
如果我将其更改为
x.For<IDatabase>().Use(new Database("DefaultDb"));
有用。任何想法为什么?我想知道是否通过使用 New,它最终会生成一个不同的 IDatabase 实例,尤其是在与 IDbContext 实例混合时。谢谢。