Привет, у меня та же проблема, всегда уникальность не делает ее всегда уникальной.
но есть немного документации, чтобы знать, что он должен делать.
Я использую следующее:
"For^ILeadRepository^().Use^LeadRepository^();"
^ должно быть в скобках. Я не могу здесь печатать по какой-то причине.
, а затем внутри метода фабрики объектов:
" LeadRepository instance = ioc.GetInstance^LeadRepository^();
ioc.Inject(typeof(ILeadRepository), instance);
ioc.Inject(typeof(LeadRepository), instance); "
где ioc - контейнер IContainer.
опять же, я не уверен, что Inject должен использоваться таким образом, но это всегда тянет одинаково
Экземпляр LeadRepository из контейнера ioc после запуска кода внедрения.
Надеюсь, что это поможет, или кто-то может написать о том, как это должно быть сделано.
Мне не нравится использовать статические фабрики или статические методы, поэтому я создал собственную фабрику, и все внутри этой фабрики извлекает уникальные экземпляры из контейнера ioc, используя приведенный выше код.
----- Если вы хотите уникальный экземпляр, то есть сингелтон на фабрику.
и вы всегда хотите вернуть один и тот же экземпляр. Я нашел лучший способ сделать это и использовать субконтейнеры на фабрике:
, например
myParentContainer = new Container(
x =>
{
x.AddRegistry<ObjectFactoryModelRegistry>();
x.AddRegistry<ServiceRegistry>();
});
myIoc = myParentContainer.GetNestedContainer();
myIoc.AssertConfigurationIsValid();
.. затем можно получить тот же экземпляр, используя код ниже:
myIoc.GetInstance<T>;