【发布时间】:2013-08-04 06:32:24
【问题描述】:
我在尝试使 singleton 生命周期与 StructureMap 中的自定义约定一起工作时遇到问题。
基本上我有一个自定义的 registry 类型类,其中包含一个我想成为 singleton 的字典,以便在应用程序启动时创建一次。
我创建了一个自定义约定,它将查看一个类的属性,并确定该类应该是 HttpContextScoped 还是 单身。
问题是,当我使用 Visual Studio 调试器运行应用程序时,每次加载网页时都会调用 应该是单例的对象的 构造函数而不是像我预期的那样发生一次。看起来该对象的行为类似于 HttpContextScoped 而不是 Singleton。
这里有一些细节:
StructuremapMvc 类在 app_start 文件夹中
public static class StructuremapMvc
{
public static void Start()
{
IContainer container = IoC.Initialize();
DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver(container);
}
}
Ioc 类
公共静态 IContainer Initialize()
ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.AssemblyContainingType<IConfigManager>();
scan.WithDefaultConventions();
scan.Convention<CustomConvention>();
});
CustomConvention : IRegistrationConvention
public void Process(Type type, Registry registry) public void Process(Type type, Registry registry)
{
var attributes = type.GetCustomAttributes(false);
if (attributes.Length > 0)
{
if (attributes[0] is SingletonAttribute)
{
registry.For(type).Singleton();
}
else if (attributes[0] is HttpContextScopedAttribute)
{
registry.For(type).HttpContextScoped();
}
}
}
[Singleton]
public class MyRegistry : IMyRegistry
【问题讨论】:
标签: asp.net-mvc-4 singleton structuremap