在结构图中,如何扫描程序集并将所有注册添加为单例?

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

会成功的。