【问题标题】:Ninject to StructureMap注入到 StructureMap
【发布时间】:2010-10-27 20:04:30
【问题描述】:

我希望将以下代码转换为 StructureMap:

private Mock<MembershipProvider> MockMembership = new Mock<MembershipProvider>();

private StandardKernel GetIoCKernel()
{
    var modules = new IModule[]
    {
        new InlineModule(
            new Action<InlineModule>[]
            {
                m => m.Bind<MembershipProvider>()
                    .ToConstant(MockMembership.Object),
            })
    };

    return new StandardKernel(modules);
}

我主要是在 StructureMap 中寻找与 ToConstant 方法等效的方法。谁能帮帮我?

【问题讨论】:

  • 解释 ToConstant 在 Ninject 中的作用,我会告诉你在 StructureMap 中的等价物。

标签: dependency-injection ninject structuremap doi


【解决方案1】:

假设ToConstant()的意思是“使用这个实例”,StructureMap中的等价物是:

For<MembershipProvider>().Use(MockMembership.Object);

【讨论】:

    【解决方案2】:

    由于 ToConstant 并不意味着单例,你想要这个:

    private StandardKernel GetIoCKernel()
    {
        return new Container(c => c.For<MembershipProvider>().Use(() => MockMembership.Object));
    }
    

    当您将委托传递给 For() 时,StructureMap 将默认为瞬态。

    【讨论】:

    • ToConstant(或它的任何 To* 兄弟)并不意味着范围(默认为瞬态)。话虽如此,鉴于它始终是同一个对象,因此这种区别非常没有意义
    • 如果您指示容器“每次我请求实现此接口/类型的对象时,我希望您给我这个特定实例”,那么我将其称为单例。
    • 我没有看到 For and Use with latest version of SM 2.5.3
    • 最新版本是2.6.1,在这里获取:github.com/downloads/structuremap/structuremap/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多