StructureMapexception代码:202没有为PluginFamily定义的默认实例

我是StructureMap的新手。 我已下载并使用的是2.6.1.0版。 我一直收到以下错误:

StructureMapexception代码:202没有为PluginFamily Company.ProjectCore.Con.IConfiguration,Company.ProjectCore,Version = 1.0.0.0定义默认实例,Culture = neutral,PublicKeyToken = null

我的Global.asax.cs看起来像:

protected void Application_Start(object sender, EventArgs e) { var container = new Container(x => { x.For().Use(); x.For().Use(); x.For().Use(); x.For().Use(); x.For().Use(); }); container.AssertConfigurationIsValid(); } 

我从ObjectFactory.Initialize更改为“new Container”进行调试。 当单步执行AssertConfigurationIsValid()方法时,缓存有效,但EmailService在以下行中的GetInstance方法失败:

 [Pluggable("Default")] public class EmailService : IEmailService private readonly IConfiguration _configuration; public EmailService() { _configuration = ObjectFactory.GetInstance(); } 

如果我删除IEmailService,IUserSession会抛出相同的202错误。

我应该在Application_Start或我的类文件中添加其他内容吗?

提前致谢…

通过使用ObjectFactory.Configure替换ObjectFactory.Initialize并在我的项目中添加程序集来解决此问题:

 ObjectFactory.Configure(x => { x.Scan(scan => { scan.LookForRegistries(); scan.Assembly("MyAssembly"); scan.Assembly("MyAssembly"); }); }); 

我得到了相同的错误消息,但原因不同。 我有一个类Foo定义了两个构造函数,如下所示:

 public class Foo : IFoo { private Bar _bar; public Foo() { _bar = new Bar(); } public Foo(Bar bar) { _bar = bar; } } 

我的StructureMap配置是这样的:

 For.Use(); 

我一直收到一条错误消息

202没有为Bar定义默认实例

问题是StructureMap试图使用带参数的构造函数构造一个Foo,而不是使用无参数的默认构造函数。 我使用如何使用StructureMap通过代码定义默认构造函数中的答案解决了它? 像这样:

 For.Use(() => new Foo()); 

IConfiguration具体类的引导位置在哪里?

即:

 x.For().Use(); 

我看到了同样的错误。 在我的例子中,我在实现名称中输入了一个拼写错误,因此接口和实现名称不匹配。

 public class FooTypo : IFoo 

我应该在哪里:

 public class Foo : IFoo 

要寻找的另一件事是确保您注入的依赖项(类)是公共的 。 如果该类是内部的,则可能导致此问题。

当我收到这个错误时,那是因为我忘记将我的class级标记为public 。 那很简单。

当我使用带有NCrunch的Visual Studio 2015时,我也遇到了这个问题。 您所要做的就是在NCrunch下的配置菜单项中将选项切换为true 。 切换初始化为配置对我不起作用。

该选项位于“构建设置”下,名为“ 将引用的程序集复制到工作区