我得到了“没有为TestRequestRepository定义默认实例”错误的structureMap。虽然这个错误不一致且频繁,但有时会出现。
以下是我正在使用的示例代码段,请告诉我这可能是“中间”错误的原因。
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();
}
}
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>();
}
}
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>();
}
先谢谢。
答案 0 :(得分:0)
我可以解决这个问题。问题是这个应用程序涉及多个模块,其中一个模块从其构造函数调用一个单独的结构图配置。因此,一旦调用该模块的结构,它就会覆盖早期的结构图定义。 因此,在将所有结构图配置放入Gloabl.asax文件后,它开始正常工作。
感谢您的帮助。
此致 maanoj