Я получаю сообщение об ошибке «Экземпляр по умолчанию не определен для 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>();
}
Заранее спасибо.