团结,RegisterType<比;和单例对象

本文关键字:单例 对象 RegisterType 团结 | 更新日期: 2023-09-27 18:04:51

我使用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<IMyObject, MyRealObject>();  
// Following code will return a new instance of MyRealObject  
myContainer.Resolve<IMyObject>();  

但是我得到了一个单例实例。

下面是我的声明。 Global.asax

// This should get me a singleton  
container.RegisterType<IRetailerService, RetailerService>(new ContainerControlledLifetimeManager(), new InjectionConstructor());  
// This is the one giving me trouble.
container.RegisterType<IInStoreRetailersViewModelBuilder, InStoreRetailersViewModelBuilder>(new InjectionConstructor(container.Resolve<IRetailerService>()));  
container.RegisterType<CollectController>(new InjectionConstructor(container.Resolve<IInStoreRetailersViewModelBuilder>()));  
控制器

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在Unity

但是似乎没有什么能给我一个全新的实例。有人能告诉我我哪里做错了吗?

团结,RegisterType<比;和单例对象

试试这个,看看是否有帮助。

container.RegisterType<IInStoreRetailersViewModelBuilder, InStoreRetailersViewModelBuilder>(
new InjectionConstructor(
    new ResolvedParameter<IRetailerService>()));  
container.RegisterType<CollectController>(
new InjectionConstructor(
    new ResolvedParameter<IInStoreRetailersViewModelBuilder>()));  

也许通过将参数解析给构造函数,你实际上是在传递一个特定的实例,这导致它是一个单例。