单元测试项目中的 StructureMap 注册表:未注册默认实例

StructureMap Registries in Unit Test Projects: No default Instance is registered

使用 StructureMap...

我在 BUSINESS 层中有一系列程序集和一个 IoC 入口点,我在其中定义我的 ContainerRegistry 如下:

BUSINESS.DLL 注册表:
WorkflowProvider class 位于它自己的库中。因此,我将 BUSINESS LAYERS 程序集传递到 WorkflowProvider 中,因此它可以 "find" 某些(预期的)class 动态地在 BUSINESS LAYER 中。

// I have simplified this class for the question
public ContainerRegistry()
{
    Scan(
        scan =>
        {
            scan.TheCallingAssembly();
            scan.WithDefaultConventions();
            scan.LookForRegistries();
            scan.AssembliesFromApplicationBaseDirectory(f => f.FullName.StartsWith("My.Awesome.Application", true, null));
            scan.AddAllTypesOf(typeof(IWorkflowProvider));
            scan.SingleImplementationsOfInterface();
        });

    For<IWorkflowProvider>().Use<WorkflowProvider>()
        .Ctor<Assembly>().Is(Assembly.GetExecutingAssembly());
}

例外情况:
现在,我想为所有程序集编写一组单元测试——包括 BUSINESS & WORKFLOW 程序集。但是,当我尝试创建 WorkflowProvider 的实例时,出现以下异常:

var container = IoC.Initialize();
var workflowProvider = container.GetInstance<WorkflowProvider>()

No default Instance is registered and cannot be automatically determined for type 'System.Reflection.Assembly'

目标:
此外,当我使用单元测试项目中的业务层 ContainerRegistry 时,我想在这部分映射中替换单元测试程序集:

For<IWorkflowProvider>().Use<WorkflowProvider>()<br/>
   .Ctor<Assembly>().Is(Assembly.GetExecutingAssembly());

问题:

希望我解释得对。

谢谢

这是我找到的唯一解决方案。我希望其他人能提出更好的解决方案。

var args = new ExplicitArguments();
args.Set<Assembly>(Assembly.GetExecutingAssembly());

var container = IoC.Initialize();
var workflowProvider = container.GetInstance<WorkflowProvider>(args);