在结构图中,如何扫描程序集并将所有注册添加为单例?
In structuremap, how do I scan assemblies and add all registrations as singletons?
我希望 structuremap 扫描我的程序集并将类注册为单例。
我会进一步将其限制为工厂、服务等。
然而,目前的挑战是将找到的注册标记为单例。
我发现一种方法是通过约定。
我找到了一个将单个特定注册标记为单例的示例,但我想对所有注册都这样做。
示例代码无法编译;首先是因为 IsConcrete 等不可用。
有人有前进的道路吗?
using StructureMap;
using StructureMap.Configuration.DSL;
using StructureMap.Graph;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
namespace planner_gui
{
public class SingletonConvention : IRegistrationConvention
{
public void Process(Type t, Registry registry)
{
if (!(t.IsConcrete()) || !(t.CanBeCreated()) ) return;
registry.For( ... ).Singleton().Use(t);
}
}
public class GuiRegistry : Registry
{
public GuiRegistry()
{
Scan(x =>
{
x.AssemblyContainingType<IExecutionContext>();
x.With(new SingletonConvention());
});
}
}
}
IsConcrete() 方法是 StructureMap.TypeRules 命名空间中的扩展方法,因此添加
using StructureMap.TypeRules
会成功的。
我希望 structuremap 扫描我的程序集并将类注册为单例。 我会进一步将其限制为工厂、服务等。
然而,目前的挑战是将找到的注册标记为单例。
我发现一种方法是通过约定。
我找到了一个将单个特定注册标记为单例的示例,但我想对所有注册都这样做。
示例代码无法编译;首先是因为 IsConcrete 等不可用。
有人有前进的道路吗?
using StructureMap;
using StructureMap.Configuration.DSL;
using StructureMap.Graph;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
namespace planner_gui
{
public class SingletonConvention : IRegistrationConvention
{
public void Process(Type t, Registry registry)
{
if (!(t.IsConcrete()) || !(t.CanBeCreated()) ) return;
registry.For( ... ).Singleton().Use(t);
}
}
public class GuiRegistry : Registry
{
public GuiRegistry()
{
Scan(x =>
{
x.AssemblyContainingType<IExecutionContext>();
x.With(new SingletonConvention());
});
}
}
}
IsConcrete() 方法是 StructureMap.TypeRules 命名空间中的扩展方法,因此添加
using StructureMap.TypeRules
会成功的。