Re: [Unity] Где создавать UnityContainer
От: LF  
Дата: 08.09.10 08:30
Оценка: 2 (1)
S>Но в реальной жизни, сам контейнер требуется в разных методах и даже в разных классах.
S>Необходимо самому создавать синглтон для контейнера, или Unity имеет свой механизм?
Два пути:
1) Создать синглтон. Я, например, делал статический класс вроде этого
  Скрытый текст
    public static class DI
    {
        private static IUnityContainer Container { get; set; }

        static DI()
        {
            Container = new StubContainer();
        }

        ///<summary>
        ///</summary>
        public static void RegisterContainer(IUnityContainer newContainer)
        {
            Container = newContainer;
        }

        ///<summary>
        ///</summary>
        public static void Register<TFrom, TTo>() where TTo : TFrom
        {
            Container.RegisterType<TFrom, TTo>();
        }

        ///<summary>
        ///</summary>
        public static void RegisterAsSingleton<TFrom, TTo>() where TTo : TFrom
        {
            Container.RegisterType<TFrom, TTo>(new ContainerControlledLifetimeManager());
        }

        ///<summary>
        ///</summary>
        public static void Register<TFrom>(TFrom instance)
        {
            Container.RegisterInstance(instance);
        }

        ///<summary>
        ///</summary>
        public static T Resolve<T>()
        {
            return Container.Resolve<T>();
        }

        ///<summary>
        ///</summary>
        public static object Resolve(Type t)
        {
            return Container.Resolve(t);
        }

        ///<summary>
        ///</summary>
        public static T Resolve<T>(string name)
        {
            return Container.Resolve<T>(name);
        }

        ///<summary>
        ///</summary>
        public static void BuildUp<T>(T item)
        {
            Container.BuildUp(item);
        }
    }

2) передавать контейнер в каждый класс.

Второй подход мне кажется более кошерным, но и использовать его сложнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.