c# – Unity,RegisterType <>和Singleton对象

我正在使用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 singleton instance Per-Web-Request in Unity

但似乎没有什么能给我一个全新的例子.任何人都可以了解我在这里做错了什么?

解决方法

试试这个,看看它是否有帮助.
container.RegisterType<IInStoreRetailersViewModelBuilder,InStoreRetailersViewModelBuilder>(
new InjectionConstructor(
    new ResolvedParameter<IRetailerService>()));  
container.RegisterType<CollectController>(
new InjectionConstructor(
    new ResolvedParameter<IInStoreRetailersViewModelBuilder>()));

也许通过自己将参数解析为构造函数,您实际上是在传递一个特定的实例,这导致它是一个单例.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


c语言数组越界会怎么样
c语言指针怎么等于数组
c语言数组怎么存入文字
c语言中怎么显示数组
c语言数组元素怎么选
c语言数组怎么累加
c语言数组符号怎么输入
c语言怎么用长数组
c语言数组函数怎么输入
c语言数组怎么去掉差异
c语言怎么求解数组
c语言数组怎么用变量
c语言怎么申明数组
c语言怎么控制数组
c语言怎么计算数组长度
c语言数组怎么插星号
c语言数组怎么加长度
c语言中怎么输出数组
c语言怎么记住数组边界
c语言数组怎么输入符号