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

时间:2017-08-16 12:51:14

标签: c# structuremap

使用StructureMap ...

我有一系列装配&在BUSINESS层中的单个IoC入口点,其中我定义了ContainerRegistry,如下所示:

BUSINESS.DLL注册:
WorkflowProvider 类存在于其中。自己的图书馆因此,我将BUSINESS LAYERS程序集传递到 WorkflowProvider ,以便它可以找到"动态层中的某些(预期)类动态。

// 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());
}

EXCEPTION:
现在,我想为所有组件编写一套单元测试 - 包括BUSINESS&amp;工作流程组件。但是,当我尝试创建 WorkflowProvider 的实例时,我收到以下异常:

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

未注册默认实例,无法自动生成   确定类型&#39; System.Reflection.Assembly&#39;

目标:
另外,当我使用Unit Test项目中的BUSINESS LAYERS ContainerRegistry时,我想在映射的这一部分替换UnitTest Assembly:

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

问题:

  • 单元测试项目是否也需要它的&#39;自己的注册表?
  • 如果是这样,它看起来像什么?
  • 如果是这样,我如何在1个项目中使用2个注册表?
  • 如何替换GetExecutingAssembly部分?
  • 这里的方法是什么?

希望我正在解释这一点。

由于

1 个答案:

答案 0 :(得分:0)

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

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

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