StructureMap异常代码:202没有为PluginFamily定义的默认实例

Pet*_*ter 21 c# structuremap asp.net

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

StructureMap异常代码: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<ICache>().Use<Cache>();
                        x.For<IEmailService>().Use<EmailService>();
                        x.For<IUserSession>().Use<UserSession>();
                        x.For<IRedirector>().Use<Redirector>();
                        x.For<INavigation>().Use<Navigation>();
                    });

                container.AssertConfigurationIsValid();

}
Run Code Online (Sandbox Code Playgroud)

我从ObjectFactory.Initialize更改为"new Container"进行调试.当单步执行AssertConfigurationIsValid()方法时,Cache可以工作,但EmailService在以下行中的GetInstance方法失败:

[Pluggable("Default")]
public class EmailService : IEmailService

private readonly IConfiguration _configuration;

public EmailService()
{
    _configuration = ObjectFactory.GetInstance<IConfiguration>();
}
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢...

Pet*_*ter 21

此问题已修复更换ObjectFactory.InitializeObjectFactory.Configure和添加在我的项目的组件:

ObjectFactory.Configure(x =>
{
    x.Scan(scan =>
    {
        scan.LookForRegistries();
        scan.Assembly("MyAssembly");
        scan.Assembly("MyAssembly");
    });
});
Run Code Online (Sandbox Code Playgroud)


小智 12

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

public class Foo : IFoo
{
    private Bar _bar;

    public Foo()
    {
       _bar = new Bar();
    }

    public Foo(Bar bar)
    {
        _bar = bar;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的StructureMap配置是这样的:

For<IFoo>.Use<Foo>();
Run Code Online (Sandbox Code Playgroud)

我一直收到一条错误信息

202没有为Bar定义默认实例

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

For<IFoo>.Use(() => new Foo());
Run Code Online (Sandbox Code Playgroud)


RPM*_*984 5

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

即:

x.For<IConfiguration>().Use<Configuration>();
Run Code Online (Sandbox Code Playgroud)

  • 问题的答案肯定是你如何引导.StructureMap错误202表示您没有告诉StructureMap如何解决依赖关系(在引导中).在这种特定情况下,您从未告诉它如何解决IConfiguration. (2认同)