Параметры конструктора Unity, с изюминкой - PullRequest
0 голосов
/ 09 августа 2011

У меня есть этот тип иерархии классов:

public interface IA{}

public interface IB{void Foo();}

public class A:IA
{
 [Dependency]
 IB myb{get;set;}

 void myfunc(){ myb.Foo()}
}

public class B:IB
{
 public B(IA ia){}
}

Я хочу создать экземпляр класса A с Unity.Но когда я хочу сделать это, я хотел бы написать что-то вроде этого:

public Testclass
{   
 void TestMethod()
 {
  IUnityContainer container = new UnityContainer();
  A currentA;
  container.RegisterType<IB,B>(new InjectionConstructor(currentA);
  currentA = container.Resolve<A>(); 
 }
}

Это терпит неудачу в строке container.RegisterType, говоря, что «Вывод типа параметра не работает для нулевых значений».

Как заставить это работать?

Редактировать: Ааааа, как я ненавижу это ... Наш Архитектор сделал два интерфейса с одинаковым именем, и именно поэтому я потратил 2 часа своей жизни.Даниэль Хилгарт дал мне хорошую идею, но я не смог ее использовать, пока не понял, что reharper импортировал неправильный интерфейс.

Ответы [ 2 ]

4 голосов
/ 09 августа 2011

У вас круговая зависимость.Это плохо.Или исправьте это или предоставьте фабрику для создания A.

0 голосов
/ 09 августа 2011

В Ninject вы можете отложить некоторую работу, если ваш класс реализует IInitializable.Вы могли бы сделать что-то подобное здесь.В Initialize вы могли бы исправить любые зависимости, которые были невозможны на этапе инжекции на основе конструктора.

Но ваш вопрос не очень понятен.Вы формулируете проблему, но не конкретный вопрос.«Почему это не работает?», «Должно ли это работать?», «Кто-нибудь может предложить альтернативу, стратегию?» И т. Д.

...