Проблема:StructureMap и MongoRepository.1.6.2 .Net 4.5
У меня возникли проблемы с получением StructureMap найти экземпляр по умолчанию для IRepository <> типа в пространстве имен MongoRepostiory.
Сообщение об исключении:
"StructureMap Код исключения: 202 Нет По умолчанию Instance определено для PluginFamily MongoDB.Driver.MongoUrl, MongoDB.Driver, Version = 1.8.3.9, культура = нейтральной, PublicKeyToken = f686731cfb9cc103 "
оказывается, что StructureMap является инстанцирование класса MonogoRepository с неправильным конструктором ...
MonogoRepository имеет следующие конструктор:
public class MongoRepository<T> : MongoRepository<T, string>, IRepository<T>, IRepository<T, string>, IQueryable<T>, IEnumerable<T>, IQueryable, IEnumerable where T : MongoRepository.IEntity<string>
{
public MongoRepository();
public MongoRepository(MongoUrl url);
public MongoRepository(string connectionString);
public MongoRepository(MongoUrl url, string collectionName);
public MongoRepository(string connectionString, string collectionName);
}
Я хочу общественность MongoRepository (строка connectionString); конструктор, который будет вызываться ... но кажется, что из сообщения об исключении, поскольку StructureMap пытается разрешить MongoUrl, он не вызывает желаемый.
Интересно:
Вопросы:
- ли я настроить что-то неправильно, которая вызывает неправильный конструктор назвать? или
- Является ли это поведением по умолчанию, и если да, то каким образом я могу его изменить, чтобы вызвать нужный конструктор?
установки параметров:
Я следующий класс реестра:
public class IocRegistry : Registry
{
public IocRegistry()
{
this.For(typeof(IRepository<>)).Use(typeof(MongoRepository<>))
.CtorDependency<string>("connectionString")
.Is("MongoServerSettings");
}
}
И следующий инициализации контейнера:
public static IContainer Initialize() {
ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.LookForRegistries();
scan.WithDefaultConventions();
});
});
return ObjectFactory.Container;
}
IocRegistry определенно получить удар, когда я поставить точку останова в свой конструктор и отладить приложение.
Код, который потребляет IRepository <> является:
public class ImageContentService : IImageContentService
{
private IRepository<ImageItem> imageRepository;
public ImageContentService(IRepository<ImageItem> imageRepository)
{
this.imageRepository = imageRepository;
}
}
Соответствующий вывод ObjectFactory.Container.WhatDoIHave() (когда все регистрации имели место) составляет:
===========================================================================================================
Configuration Sources:
0) Registry: StructureMap.InitializationExpression, StructureMap, Version=2.6.4.0, Culture=neutral, PublicKeyToken=e60ad81abae3c223
1) Registry: StructureMap.Configuration.DSL.Registry, StructureMap, Version=2.6.4.0, Culture=neutral, PublicKeyToken=e60ad81abae3c223
2) Registry: StructureMap.Configuration.DSL.Registry, StructureMap, Version=2.6.4.0, Culture=neutral, PublicKeyToken=e60ad81abae3c223
3) Registry: Mch.Core.IocRegistry, Mch.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
============================================================================================================================================================================================================================================================================================================================================
PluginType Name Description
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IRepository`1<T> (IRepository`1<T>) d26c76dd-8550-4d02-bf8a-25c6f0075346 Configured Instance of MongoRepository.MongoRepository`1, MongoRepository.Net45, Version=1.6.2.0, Culture=neutral, PublicKeyToken=null
Scoped as: Transient
d26c76dd-8550-4d02-bf8a-25c6f0075346 Configured Instance of MongoRepository.MongoRepository`1, MongoRepository.Net45, Version=1.6.2.0, Culture=neutral, PublicKeyToken=null
Каков результат работы ObjectFactory.Container.WhatDoIHave()? – ozczecho
Я добавил результат ObjectFactory.Container.WhatDoIHave() – JTech