Только Oracle и SQLServer Microsoft являются закрытым исходным кодом, и когда что-то идет не так, как надо, и у Вас есть проблема, ответ является просто телефонным вызовом далеко (и наличные деньги если курс). MySQL Anyways и PostGre имеют несколько консалтинговых услуг предприятия, но в конце эти консультанты не действительно resposible для продукта, потому что продукт принадлежит всем. Который является большим, потому что можно войти и исправить код, если Вы хороши с C и относительно низкоуровневым программированием, но если Вы не находите, что решение могло бы стать погоней за несбыточным.
Теперь с тех пор не все достаточно квалифицированы, и те предприятия с деньгами предпочитают безопасность (в деловом чутье) баз данных с закрытым исходным кодом, причина, почему эти решения не обанкротились помимо того, что их реализации серьезны и стоят денег, если у Вас есть он.
хорошо теперь наконец наиболее важное различие между SQLServer и Oracle, и тем различием является ОС, большинство людей, использующих Windows, будет придерживаться с, Вы предположили это, SQLServer, но если Вы работаете на разновидностях Unix, Oracle является Вашим решением с закрытым исходным кодом. Так или иначе я использую Oracle на Солярисе, но если бы наша цель была Windows I, то вероятно, использовал бы SQLServer, потому что обоими продуктами является горное тело, но я полагаю, что Microsoft имеет некоторые специальные приемы под капотом для получения лучшей производительности на окнах.
Править
После некоторых отзывов в комментариях я решил, что ответ Свена - намного лучший ответ. Спасибо Крису Таваресу за указание на технические достоинства.
Это практически единственный способ сделать это.
Вы можете немного изменить его (я ненавижу RegisterType с одинаковым типом для каждого универсального параметра):
EventService es = _container.Resolve<EventService>();
_container.RegisterInstance<IEventService>(es);
_container.RegisterInstance<IEventServiceInformation>(es);
Если один или несколько ваших дочерних IoC собираются запросить конкретный тип EventService
(надеюсь, нет ) нужно добавить еще один RegisterInstance
типа RegisterInstance
. Надеюсь, вам это не нужно, и все зависимые объекты запрашивают IEventService
, а не EventService
.
Надеюсь, это поможет, Андерсон
[2nd Edit]
Из-за критических изменений в способе обработки регистраций Unity обновленный подход больше не работает. [Исходный ответ] - это снова путь. (Для получения дополнительных сведений об изменениях в Unity перейдите по ссылке в комментариях ниже.)
[Edit]
Решение для выполнение этого с помощью конфигурации XML можно найти здесь . Основываясь на этом ответе, я бы предложил упрощенный подход, основанный только на коде, а именно:
_container.RegisterType<IEventService, EventService>(new ContainerControlledLifetimeManager());
_container.RegisterType<IEventServiceInformation, EventService>(new ContainerControlledLifetimeManager());
bool singleton = ReferenceEquals(_container.Resolve<IEventService>(), _container.Resolve<IEventServiceInformation>());
Таким образом, сам класс EventService не публикуется контейнером. Поскольку класс следует рассматривать как деталь реализации, это предпочтительный подход.
[Исходный ответ]
Ответ немного запоздал, но должен помочь:
_container.RegisterType<EventService>(new ContainerControlledLifetimeManager());
_container.RegisterType<IEventService, EventService>();
_container.RegisterType<IEventServiceInformation, EventService>();
bool singleton = ReferenceEquals(_container.Resolve<IEventService>(), _container.Resolve<IEventServiceInformation>());