从另一个项目覆盖 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 InitializerContainerRegistry 类,就像这样...

初始化器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<>));
    } 
}