更新: 作爲@Joshua下面那根指出,這是默認的SM行爲。以下單元測試表明。第一次測試使用默認行爲。第二條顯示,如果你想它,你將如何得到一個唯一的實例:StructureMap的
using System;
using System.Collections.Generic;
using NUnit.Framework;
using StructureMap;
using StructureMap.Pipeline;
namespace SMTest
{
[TestFixture]
public class TestSOQuestion
{
class Foo : IFoo { }
interface IFoo { }
private interface IBar {
IFoo Foo { get; set; }
}
class Bar : IBar
{
public IFoo Foo { get; set; }
public Bar(IFoo foo)
{
Foo = foo;
}
}
class UsesFooAndBar
{
public IBar Bar { get; set; }
public IFoo Foo { get; set; }
public UsesFooAndBar(IFoo foo, IBar bar)
{
Foo = foo;
Bar = bar;
}
}
[Test]
public void TestOtherAnswer()
{
IContainer container = new Container(x =>
{
x.For<IFoo>().Use<Foo>();
x.For<IBar>().Use<Bar>();
});
var usesFooAndBar = container.GetInstance<UsesFooAndBar>();
Assert.AreSame(usesFooAndBar.Foo, usesFooAndBar.Bar.Foo);
}
[Test]
public void TestNonDefaultBehaviour()
{
IContainer container = new Container(x =>
{
x.For<IFoo>().AlwaysUnique().Use<Foo>();
x.For<IBar>().Use<Bar>();
});
var usesFooAndBar = container.GetInstance<UsesFooAndBar>();
Assert.AreNotSame(usesFooAndBar.Foo, usesFooAndBar.Bar.Foo);
}
}
}
這對StructureMap應該是完全沒有必要的。如果是,就有一個錯誤。 – 2010-09-20 18:48:52
@Joshua Flanagan:很酷,我不知道。我寫了一個單元測試來檢查出來,並把它放在我的文章中。既然你是團隊成員(並且給了我一個反對票),我不得不指出,如果文檔不是基於不推薦的和詳細的方法,這將更清楚:) – 2010-09-20 19:17:27
我同意,並指出它是開源的,我們會貢獻! – 2010-09-20 20:04:46