2010-01-15 3 views
1

У меня есть следующий код, и когда я пытаюсь его запустить, я вижу, что BrokerProvider не решается. Вот мой код:Атрибут Unity [Dependency] не разрешает

static void Main(string[] args) 
     { 
      IUnityContainer container = new UnityContainer(); 
      UnityConfigurationSection section = (UnityConfigurationSection) ConfigurationManager.GetSection("unity"); 
      section.Containers.Default.Configure(container); 

      new TestBroker().RunTestBroker();    
     } 


class TestBroker 
    { 
     private IBrokerProvider brokerProvider; 

     public void RunTestBroker() 
     { 
      List<IPortfolio> portfolios = BrokerProvider.GetPortfolios(); 
     } 

     [Dependency] 
     public IBrokerProvider BrokerProvider 
     { 
      get { return brokerProvider; } 
      set { brokerProvider = value; } 
     } 
    } 

Родственный конфигурации

<unity> 
    <typeAliases> 
     <typeAlias alias="string" type="System.String, mscorlib" /> 
     <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" /> 
     <typeAlias alias="IBrokerProvider" type="PA.Common.Interfaces.IBrokerProvider, PA.Common" /> 

     <typeAlias alias="PManager" type="PA.BrokerProviders.PManager, PA.BrokerProviders" /> 
    </typeAliases> 
    <containers> 
     <container> 
     <types> 
      <type type="IBrokerProvider" mapTo="PManager"> 
      <lifetime type="singleton" /> 
      </type> 
     </types> 
     </container> 
    </containers> 
    </unity> 

Другой вопрос: мне нужно повторить те же 3 строки кода, которые у меня есть под основным в любом другом классе, который я хотел бы сделать, чтобы использовать единство или установить его один раз достаточно?

ответ

10

Это потому, что создается TestBroker непосредственно с помощью вызова оператора new на нем:

new TestBroker().RunTestBroker(); 

Для того единства, чтобы решить ваши зависимостей необходимо вызвать структуру следующим образом:

var broker = container.Resolve<TestBroker>(); 

IUnityContainer является интерфейс, который будет выполнять всю вашу работу, то есть разрешение типов на экземпляры. Вам нужно только создать его один раз, а затем просто передать его вокруг приложения, когда оно вам понадобится.

+0

thanks; мне также нужно сопоставить TestBroker в файле конфигурации? –

+0

Да, вам нужно добавить его в раздел конфигурации. –

Смежные вопросы