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);