StructureMap登记处单元测试项目:无默认实例注册

问题描述:

使用StructureMap ...StructureMap登记处单元测试项目:无默认实例注册

我有一系列组件&的业务层中的单个IoC的入门点,其中我定义我ContainerRegistry像这样:

BUSINESS.DLL注册表:
WorkflowProvider类生活在自己的图书馆。因此,我将BUSINESS LAYERS组件传入WorkflowProvider,以便它可以动态地“查找”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()); 
} 

除外:
现在,我想要写的所有组件一套单元测试 - 包括业务工作流&组件。然而,当我尝试创建WorkflowProvider的实例我得到以下异常:

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

没有默认实例注册,不能自动 类型确定“System.Reflection.Assembly”

目标:
此外,当我使用的业务层ContainerRegistry从单元测试项目,我想潜艇titute的单元测试大会在映射的这一部分:

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

问题:

  • 是否单元测试项目也需要有自己的注册?
  • 而且,如果是这样,它是什么样子?
  • 如果是这样,我该如何在1个项目中使用2个注册表?
  • 如何替换GetExecutingAssembly部分?
  • 这里的正确方法是什么?

希望我解释这个权利。

谢谢

这是我发现的唯一解决方案。我希望别人能拿出更好的解决方案。

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

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