我在尝试使单例生命周期与StructureMap 中的自定义约定一起工作时遇到问题。
基本上我有一个自定义注册表类型类,其中包含一个我想成为单例的字典,以便在应用程序启动时创建一次。
我创建了一个自定义约定,它将查看类的属性并确定该类是否应该是HttpContextScoped或Singleton。
问题是,当我使用 Visual Studio 调试器运行应用程序时,每次加载网页时都会调用应该是单例的对象的构造函数,而不是像我预期的那样发生一次。看起来该对象表现为HttpContextScoped而不是Singleton。
以下是一些细节:
app_start文件夹中的StructuremapMvc类
public static class StructuremapMvc
{
public static void Start()
{
IContainer container = IoC.Initialize();
DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver(container);
}
}
国际奥委会类
公共静态 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