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

时间:2015-01-07 12:52:37

标签: c# singleton structuremap

我希望structmap能够扫描我的程序集并将类注册为单例。 我进一步将此限制为工厂,服务等。

然而,目前的挑战是将找到的注册标记为单身。

我发现一种方式是通过惯例。

我找到了一个将单个特定注册标记为单身的示例,但我想对所有注册执行此操作。

示例代码无法编译;首先是因为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());
            });
        }
    }
}

1 个答案:

答案 0 :(得分:0)

IsConcrete()方法是StructureMap.TypeRules命名空间中的扩展方法,因此添加

using StructureMap.TypeRules

会做到这一点。