c# - denegado - error de servidor en la aplicación '/' visual studio 2017




Código de excepción de StructureMap: 202 No se definió ninguna instancia predeterminada para PluginFamily (5)

Soy nuevo en StructureMap. He descargado y estoy usando la versión 2.6.1.0. Sigo recibiendo el siguiente error:

Código de excepción de StructureMap: 202 Ninguna instancia predeterminada definida para PluginFamily Company.ProjectCore.Core.IConfiguration, Company.ProjectCore, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null

Mi Global.asax.cs se parece a:

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();

}

Cambié de ObjectFactory.Initialize a "new Container" para depurar. Al pasar por el método AssertConfigurationIsValid (), Cache funciona pero EmailService falla en el método GetInstance en la siguiente línea:

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

private readonly IConfiguration _configuration;

public EmailService()
{
    _configuration = ObjectFactory.GetInstance<IConfiguration>();
}

Si elimino IEmailService, se produce el mismo error 202 en IUserSession.

¿Debo agregar algo más en Application_Start o en mis archivos de clase?

Gracias por adelantado...


¿Dónde está tu bootstrapping para la clase concreta de IConfiguration?

Es decir:

x.For<IConfiguration>().Use<Configuration>();

Cuando obtuve este error fue porque olvidé marcar mi clase como public . Que simple


Este problema se solucionó reemplazando ObjectFactory.Initialize con ObjectFactory.Configure y agregando los ensamblados en mi proyecto:

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

Otra cosa que debe buscar es asegurarse de que la dependencia (clase) que está inyectando es pública . Si la clase es interna, puede causar este problema.


También tuve este problema cuando estaba usando Visual Studio 2015 con NCrunch. Todo lo que tiene que hacer es alternar una opción a true en el elemento del menú de configuración en NCrunch. Cambiar de inicializar para configurar no funcionó para mí.

La opción está en Configuración de compilación, se denomina ' Copiar ensamblajes referenciados al área de trabajo '