使用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());
问题:
希望我正在解释这一点。
由于
答案 0 :(得分:0)
这是我找到的唯一解决方案。我希望其他人能提出更好的解决方案。
var args = new ExplicitArguments();
args.Set<Assembly>(Assembly.GetExecutingAssembly());
var container = IoC.Initialize();
var workflowProvider = container.GetInstance<WorkflowProvider>(args);