从另一个项目覆盖 StructureMap 注册表
Overriding StructureMap Registry from Another Project
我有一个 Unit Test
项目并且想在 Unit of Work
class 中填充存储库的存根实现。我知道如何使用 other IoC 技术来做到这一点,但我是 StructureMap 的新手。
- 如何从我的单元测试项目中重新定义和替换定义
- 那看起来像什么?
我找不到这方面的好文档。
默认容器:
下面是我希望覆盖的部分业务注册表。
public ContainerRegistry()
{
Scan(...);
// --------
// UNIT OF WORK
// This is the DEFAULT implementation
For(typeof(IRepository<>)).Use(typeof(GenericRepository<>));
For<IUnitOfWork>().Use<MeasurementContractsUnitOfWork>();
}
单元测试:
在单元测试项目中,我希望 IoC 改用它:
// This is the STUB Implementation
For(typeof(IRepository<>)).Use(typeof(GenericRepositoryStub<>));
OBJECTIVE:
objective 是像往常一样简单地使用容器,但自动填充存根。
var container = IoC.Initialize();
var uow = container.GetInstance<IUnitOfWork>()
我不确定这样做是否正确,但这就是我实现目标的方式。如果有人给出更好的答案,我会标记他们的答案:
我在 Unit Test
项目中创建了单独的 IOC Initializer
和 ContainerRegistry
类,就像这样...
初始化器CLASS:
public static class IoC
{
public static IContainer Initialize()
{
var container = new Container();
// NOTE: If you have many Registries to consider, you can add them (order matters)
// The Business Registry
container.Configure(x => x.AddRegistry<Business.DependencyResolution.ContainerRegistry>());
// The UnitTest Projects Registry (order matters)
container.Configure(x => x.AddRegistry<ContainerRegistry>());
return container;
}
}
注册表CLASS:
public class ContainerRegistry : Registry
{
public ContainerRegistry()
{
// The Override
For(typeof(IRepository<>)).Use(typeof(GenericRepositoryIdentifiableStub<>));
}
}
我有一个 Unit Test
项目并且想在 Unit of Work
class 中填充存储库的存根实现。我知道如何使用 other IoC 技术来做到这一点,但我是 StructureMap 的新手。
- 如何从我的单元测试项目中重新定义和替换定义
- 那看起来像什么?
我找不到这方面的好文档。
默认容器:
下面是我希望覆盖的部分业务注册表。
public ContainerRegistry()
{
Scan(...);
// --------
// UNIT OF WORK
// This is the DEFAULT implementation
For(typeof(IRepository<>)).Use(typeof(GenericRepository<>));
For<IUnitOfWork>().Use<MeasurementContractsUnitOfWork>();
}
单元测试:
在单元测试项目中,我希望 IoC 改用它:
// This is the STUB Implementation
For(typeof(IRepository<>)).Use(typeof(GenericRepositoryStub<>));
OBJECTIVE:
objective 是像往常一样简单地使用容器,但自动填充存根。
var container = IoC.Initialize();
var uow = container.GetInstance<IUnitOfWork>()
我不确定这样做是否正确,但这就是我实现目标的方式。如果有人给出更好的答案,我会标记他们的答案:
我在 Unit Test
项目中创建了单独的 IOC Initializer
和 ContainerRegistry
类,就像这样...
初始化器CLASS:
public static class IoC
{
public static IContainer Initialize()
{
var container = new Container();
// NOTE: If you have many Registries to consider, you can add them (order matters)
// The Business Registry
container.Configure(x => x.AddRegistry<Business.DependencyResolution.ContainerRegistry>());
// The UnitTest Projects Registry (order matters)
container.Configure(x => x.AddRegistry<ContainerRegistry>());
return container;
}
}
注册表CLASS:
public class ContainerRegistry : Registry
{
public ContainerRegistry()
{
// The Override
For(typeof(IRepository<>)).Use(typeof(GenericRepositoryIdentifiableStub<>));
}
}