0

Я использую инъекцию зависимостей с Microsoft Unity. Но у меня возникают проблемы, когда у меня есть Resolve экземпляры.Unity Container с UnityDependencyResolver

Мой сценарий: У меня есть приложение WPF и библиотека классов. Unity устанавливается в библиотеке классов.

Я пытаюсь создать объект, используя инъекцию зависимости.

я получил следующее сообщение об ошибке:

The type 'Microsoft.Practices.Unity.IUnityContainer' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.Practices.Unity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f'.

Код:

UnityDependencyResolver ObjUnityDependencyResolver = new UnityDependencyResolver(UnityContainerConfig.Initialize()); 
var myclass = ObjUnityDependencyResolver.GetService(typeof(IMyClass)); 
myclass.HelloWorld(); //Console.Write("Hello World"); 

Это мое единство контейнер:

public static class UnityContainerConfig 
{ 
    private static IUnityContainer _unityContainer = null; 

    public static IUnityContainer Initialize() 
    { 
     if (_unityContainer == null) 
     { 
      _unityContainer = new Microsoft.Practices.Unity.UnityContainer() 
      .RegisterType<IMyClass, MyClass>(); 
     } 

     return _unityContainer; 
    } 
} 

Это мое единство распознаватель:

public class UnityDependencyResolver : IDependencyResolver 
{ 
    private IUnityContainer _unityContainer = null; 

    public UnityDependencyResolver(IUnityContainer unityContainer) 
    { 
     this._unityContainer = unityContainer; 
    } 

    public object GetService(Type serviceType) 
    { 
     try 
     { 
      return _unityContainer.Resolve(serviceType); 
     } 
     catch 
     { 
      return null; 
     } 
    } 

    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     try 
     { 
      return _unityContainer.ResolveAll(serviceType); 
     } 
     catch 
     { 
      return new List<object>(); 
     } 
    } 
} 

Я должен установить Unity в каждом проекте в моем решении?

Что такое «лучший способ создать экземпляр» и использовать инъекцию зависимости на единицу?

+0

Является ли это проект MVC ? –

+0

@TarekAboELkheir - * У меня есть приложение WPF и библиотека классов * – smoksnes

ответ

1

Вам нужно только установить Unity в проекте клиента, и не использовать _unityContainer.Resolve (ServiceType), если вы тщательно настроить свой проект, Unity будет заботиться о решении каждой услуги,

+0

, если я не использую «разрешить», как бы я мог указать класс? Я имею в виду: var myclass = IMyClass? У вас есть пример или учебник? спасибо –

+0

, на какой проект вы работаете, поэтому я могу привести вам соответствующий пример –

+0

приложение для работы с окнами и wpf –

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