- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Unity 实例化一些对象,我发现无论我尝试什么,Unity 都会为我的对象创建单例。
根据文档: http://msdn.microsoft.com/en-us/library/dd203242.aspx#Y500
使用下面的代码,我应该在每次解析接口(interface)时得到一个不同的实例。
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>()));
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 操作,在第二次调用时,在构造函数中注入(inject)的 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>()));
也许通过自己将参数解析为您的构造函数,您实际上是在传递一个特定的实例,这导致它成为一个单例。
关于c# - Unity、RegisterType<> 和 Singleton 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6999056/
我目前的情况是,我正在为一些代码编写单元测试,这些代码使用另一个代码库,该代码库使用依赖注入(inject)并提供 UnitContainerExtension 来引导库所需的所有具体类。但是在我的单
我正在跟踪在StackOverflow上找到的示例,一切进行得很好,直到需要注册我的类型为止。 我的Web应用程序在带有Prism和MVVM的Silverlight 4上运行。 该示例使用“ Micr
请有人建议我如何使用运行时传递的参数注册一个类 public interface ITabContentSending { TabType TheTabType { get; set; }
我的解决方案中有三个项目。 一个拿着界面: public interface ISetupData { Dictionary Data { get; set; } } 接口(interface
我有两个服务 IServiceA 和 IServiceB。 IServiceB 的具体实现如下所示: public class ServiceB : IServiceB { public Se
我正在尝试执行以下操作但失败了: class base {} class derived1 : base {} class derived2 : base {} interface itr where
这是一个示例控制台应用程序(添加 Unity NugGet 包后它将运行良好)似乎显示了 Unity 中的错误: using System; using Microsoft.Practices.Uni
我按照本教程开始使用 Autofac: http://flexamusements.blogspot.com/2010/09/dependency-injection-part-3-making-ou
我想使用 Autofac 探索自定义拦截器。我目前正在为 DynamicProxy 使用 Autofac 4.2.0 版和 CaSTLe.Core 3.3.3 版。 我从以下基本行为开始,想在 Aut
我一直在使用 Microsoft 的 Unity IOC 容器。 RegisterType() 方法有一堆重载看起来都类似于 IUnityContainer RegisterType(Type t,
我有一个使用 Unity 的应用程序。在应用程序的一个区域中,代码扫描程序集以使用以下代码注册类型(自动注册): public class CommonRegistry : UnityRegistry
我正在使用 UnityContainer,我想注册一个接口(interface),而不是一个类型,而是另一个接口(interface)。不幸的是,我无法干净地做到这一点.. 我有几个通用的接口(int
我一直在使用 Unity 容器并注意到一个奇怪的行为。我有一个类,它实现了多个接口(interface)。我希望此类在具有不同生命周期的应用程序的不同位置使用。所以我已经将 IFooDerived1
使用 AutoFac 时,您可以使用 .RegisterType 将类与接口(interface)相关联,但您也可以使用 .Register(它允许您通过一个 lambda)。 对于具有无参数构造函数
我正在使用 Unity 实例化一些对象,我发现无论我尝试什么,Unity 都会为我的对象创建单例。 根据文档: http://msdn.microsoft.com/en-us/library/dd20
我需要注册许多类型映射,但对于少数类型映射,我需要使用不同的依赖注入(inject)属性重新注册。 对于 Unity,这似乎是不可能的,并且这似乎是 RegisterType() 的一个错误。 这是一
我正在尝试自动注册存储库: 这行得通,但我不喜欢它,因为在服务层类中,我必须提供具体的 EntityRepository给构造函数而不是提供接口(interface) IRepository publ
我是 Autofac 的新手,我想了解 Web api 2(.Net 框架)中 RegisterInstance 和 RegisterType 之间的区别。在他的文档中有一个简单的 example v
这是我的服务构造函数的样子: public Service(string path) 我正在像这样配置统一: IUnityContainer container = new UnityContaine
我有一个统一的运行代码。 现在我想使用 Moq 对 ASP-MVC 进行单元测试。 在 global.asax 的代码中,我有以下内容: IUnityContainer container = new
我是一名优秀的程序员,十分优秀!