StructureMap Exception 202未定义默认实例(版本2.61) - 错误不一致

时间:2011-12-05 09:39:16

标签: c# structuremap

我得到了“没有为TestRequestRepository定义默认实例”错误的structureMap。虽然这个错误不一致且频繁,但有时会出现。

以下是我正在使用的示例代码段,请告诉我这可能是“中间”错误的原因。

Global.asax中

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

Bootstrapper类

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 Class

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 Class

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 :(得分:0)

我可以解决这个问题。问题是这个应用程序涉及多个模块,其中一个模块从其构造函数调用一个单独的结构图配置。因此,一旦调用该模块的结构,它就会覆盖早期的结构图定义。 因此,在将所有结构图配置放入Gloabl.asax文件后,它开始正常工作。

感谢您的帮助。

此致 maanoj