Исключение StructureMap 202 Экземпляр по умолчанию не определен (Версия 2.61) - Ошибка не соответствует - PullRequest
0 голосов
/ 05 декабря 2011

Я получаю сообщение об ошибке «Экземпляр по умолчанию не определен для TestRequestRepository» для StructureMap.Хотя эта ошибка не является последовательной и частой, но она появляется время от времени.

Ниже приведен пример кода, который я использую, пожалуйста, дайте мне знать, что может быть причиной этой ошибки "In-Between".

Global.asax

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
        BootStrapper.Bootstrap();            
    }
}

Класс начальной загрузки

public class BootStrapper : IBootstrapper
{
    public void BootstrapStructureMap()
    {
        StructureMap.ObjectFactory.Initialize(x => x.AddRegistry(new StrcutureMapInitialization()));
    }

    public static void Bootstrap()
    {
        new BootStrapper().BootstrapStructureMap();
        //new AutomapperInitialization();
    }

    public static void Dispose()
    {
        //Imp: This calls the Dispose on all HTTP context based instances
        ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
    }
}

Класс StrcutureMapInitialization

public class StrcutureMapInitialization : Registry
{
    public StrcutureMapInitialization()
    {
        For<ITestUnitOfWork>().HttpContextScoped().Use<FD.DAL.Test.Context.TestEntities>()
            .Ctor<string>("connectionString").Is("name=TestEntities");
        For<ITempUnitOfWork>().HttpContextScoped().Use<TempEntities>()
            .Ctor<string>("connectionString").Is("name=TempEntities");

        For<IDatabaseTypeRepository>().HttpContextScoped().Use<DatabaseTypeRepository>();
        For<ITestRequestRepository>().HttpContextScoped().Use<TestRequestRepository>();
        For<ITestProviderContainer>().HttpContextScoped().Use<TestProviders>();
    }
}

Класс TestFactory

public static class TestFactory
{       
    public static ITestProviderContainer GetTestContainer()
    {
        return StructureMap.ObjectFactory.GetInstance<ITestProviderContainer>();
    }

    public static ITestRequestRepository GetTestRequestRepository(ITestUnitOfWork testUnitOfWork, ITraceManager traceManager)
    {
        var parameters = new Dictionary<string, object>();

        parameters.Add("unitOfWork", testUnitOfWork);
        parameters.Add("traceManager", traceManager);
        ExplicitArguments explicitArguments = new ExplicitArguments(parameters);

        return StructureMap.ObjectFactory.GetInstance<ITestRequestRepository>(explicitArguments);
    }
    public static ITestRequestRepository GetTestRequestRepository(int uId)
    {
        return StructureMap.ObjectFactory.GetInstance<ITestRequestRepository>();
    }

Заранее спасибо.

1 Ответ

0 голосов
/ 07 декабря 2011

Я мог бы решить эту проблему. Проблема заключалась в том, что в этом приложении было задействовано несколько модулей, и один из модулей вызывал отдельную конфигурацию структуры Strucutre из своего конструктора. Поэтому, как только вызывается конструкция этого модуля, он переопределяет ранее определенное определение структуры. Поэтому после помещения всей конфигурации структурной карты в файл Gloabl.asax она начала работать нормально.

Спасибо за помощь.

С уважением, maanoj

...