Unity Dependency Injection с использованием файла конфигурации - не может разрешить зависимость - PullRequest
0 голосов
/ 27 октября 2010

Я использую мой app.config, чтобы сообщить Unity мой интерфейс для сопоставления типов ...

<unity>
<containers>
  <container>
    <types>
      <type type="UnityDAL.Interfaces.IDataContextFactory, UnityDAL"
         mapTo="UnityDAL.UnityDemoDataContextFactory, UnityDAL" />
      <type type="UnityDAL.Interfaces.IProductRepository, UnityDAL"
         mapTo="UnityDAL.ProductRepository, UnityDAL" />
      <type name="productRepo" 
         type="UnityDAL.Interfaces.IProductRepository, UnityDAL"
         mapTo="UnityDAL.ProductRepository, UnityDAL" />

   and so on...

используя этот код

var wrapper = UnityWrapper.Create();
var productRepository = 
    wrapper.Container.Resolve<IProductRepository>("productRepo");
var productsBO = new ProductBO(productRepository);
var products = productsBO.GetAllProducts();

Вот конструктор для объекта оболочки ...

public UnityWrapper()
{
    _container = new UnityContainer();
    var section = 
        (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
    section.Containers.Default.Configure(_container);
}

но я получаю исключение, которое говорит ...

{"Не удалось разрешить зависимость, type = \" IProductRepository \ ", name = \ "productRepo \". Сообщение об исключении: текущая операция сборки (ключ сборки Ключ сборки [UnityDAL.ProductRepository, productRepo]) не выполнен: Параметр dataContextFactory не может быть разрешен при попытке вызвать конструктор UnityDAL.ProductRepository (UnityDAL.Interfaces. IDataContextFactory dataContextFactory). (Тип стратегии Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy, index 2) "}

Я думал, что этот узел подключен к этому

<type type="UnityDAL.Interfaces.IDataContextFactory, UnityDAL"
   mapTo="UnityDAL.UnityDemoDataContextFactory, UnityDAL" />

Идея здесь изначально заключалась в создании хорошей цепочки зависимостей. Есть идеи, что я делаю не так? Если у вас есть какие-либо советы или советы о том, как я могу исправить проблему, я бы хотел их услышать. Спасибо за любую помощь.

Приветствия

~ СК в Сан-Диего

1 Ответ

1 голос
/ 27 октября 2010

Это проблема сопоставления.

Попытка разрешить UnityDAL.Interfaces.IProductRepository, вам необходимо сначала разрешить UnityDAL.Interfaces.IDataContextFactory.Далее, пытаясь разрешить UnityDAL.UnityDemoDataContextFactory, вы пропускаете некоторое сопоставление.Вероятно, ctor объекта UnityDAL.UnityDemoDataContextFactory требует чего-то, что не было зарегистрировано.

Кстати: то, что вы делаете здесь, использует местоположение службы.Я избегаю такой практики, если это возможно, но если вам это абсолютно необходимо, попробуйте предоставить общий указатель службы .Эта dll поставляется с Unity и предоставляет простой интерфейс ТОЛЬКО для поиска сервисов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...