Dependency injection Ninject to StructureMap

Dependency injection Ninject to StructureMap,dependency-injection,ninject,structuremap,doi,Dependency Injection,Ninject,Structuremap,Doi,我希望将以下代码转换为StructureMap: private Mock<MembershipProvider> MockMembership = new Mock<MembershipProvider>(); private StandardKernel GetIoCKernel() { var modules = new IModule[] { new InlineModule( new Action<

我希望将以下代码转换为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);
}
private Mock MockMembership=new Mock();
私有标准内核GetIoCKernel()
{
变量模块=新IModule[]
{
新的内联模块(
新行动[]
{
m=>m.Bind()
.ToConstant(MockMembership.Object),
})
};
返回新的标准内核(模块);
}
我主要是在StructureMap中寻找与
ToConstant
方法等效的方法。有人能帮我吗?

假设
ToConstant()
的意思是“使用此实例”,那么StructureMap中的等效项是:

For<MembershipProvider>().Use(MockMembership.Object);
For().Use(MockMembership.Object);
假设
ToConstant()
表示“使用此实例”,则StructureMap中的等效项为:

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

因为ToConstant并不意味着singleton,所以您需要:

private StandardKernel GetIoCKernel()
{
    return new Container(c => c.For<MembershipProvider>().Use(() => MockMembership.Object));
}
private标准内核GetIoCKernel()
{
返回新容器(c=>c.For().Use(()=>MockMembership.Object));
}

将委托传递到For()中时,StructureMap将默认为transient。

因为ToConstant并不意味着singleton,所以需要:

private StandardKernel GetIoCKernel()
{
    return new Container(c => c.For<MembershipProvider>().Use(() => MockMembership.Object));
}
private标准内核GetIoCKernel()
{
返回新容器(c=>c.For().Use(()=>MockMembership.Object));
}

将委托传递到For()时,StructureMap将默认为transient。

解释ToConstant在Ninject中的作用,我将告诉您StructureMap中的等效项。解释ToConstant在Ninject中的作用,我将告诉您StructureMap中的等效项。ToConstant(或其任何to*同级项)并不意味着作用域(默认情况下是暂时的)。话虽如此,这种区别还是没有意义的,因为它始终是同一个对象如果您指示容器“每次我请求一个实现这个接口/类型的对象,我希望您给我这个特定的实例”,那么我会称之为单例。我不了解最新版本的SM 2.5.3,也不使用最新版本的SM 2.6.1,请看这里:ToConstant(或其任何To*同级)并不意味着一个范围(默认值是暂时的)。尽管如此,这种区别是没有意义的,因为如果您指示容器,它将始终是相同的对象“每次我请求一个实现此接口/类型的对象时,我希望您给我这个特定实例”,然后我会将其称为singleton。我没有看到SM 2.5.3的最新版本,也没有将其用于SM 2.5.3的最新版本是2.6.1,请在此处获取: