Я использую Unity, чтобы инстанцировать некоторые объекты, и я нахожу, что что бы я ни пытался, Unity создает синглоны для моих объектов.
Согласно документации: http://msdn.microsoft.com/en-us/library/dd203242.aspx#Y500
Со следующим кодом я должен получать другой экземпляр каждый раз при разрешении интерфейса.
IUnityContainer myContainer = new UnityContainer();
// Register a default (un-named) type mapping with a transient lifetime
myContainer.RegisterType();
// Following code will return a new instance of MyRealObject
myContainer.Resolve();
Но вместо этого я получаю один экземпляр.
Ниже моя декларация. Global.asax
// This should get me a singleton
container.RegisterType(new ContainerControlledLifetimeManager(), new InjectionConstructor());
// This is the one giving me trouble.
container.RegisterType(new InjectionConstructor(container.Resolve()));
container.RegisterType(new InjectionConstructor(container.Resolve()));
Controller
private readonly IInStoreRetailersViewModelBuilder _inStoreRetailersViewModelBuilder;
public CollectController(IInStoreRetailersViewModelBuilder inStoreRetailersViewModelBuilder)
{
this._inStoreRetailersViewModelBuilder = inStoreRetailersViewModelBuilder;
}
public ActionResult Index()
{
InStoreViewModel viewModel = this._inStoreRetailersViewModelBuilder.WithRetailers().WithPostcode().Build();
}
Если я открою Chrome и запущу действие Index, а затем открою Internet Explorer и вызову действие Index, то при втором вызове в конструкторе будет сгенерирован параметр inStoreRetailersViewModelBuilder при первом вызове (с Chrome).
Я пробовал использовать PerResolveLifetimeManager() и даже PerHttpRequestLifetime() из этого потока: MVC, EF - одноэлементный экземпляр DataContext Per-Web-Request in Unity
Но, кажется, ничто не дает мне совершенно нового экземпляра. Кто-нибудь может пролить свет на то, что я здесь делаю неправильно?