내가 다음 클래스 구조를 가지고 있다고 가정 :이 다음과 같은 방법으로 쉽게 할 (내가 찾고 있어요 동작 설명,이 바보 같은 인위적인 예는 사실을 무시)를 할 수 있습니다 Autofac에서유니티 컨테이너에서 객체 스코프 싱글 톤을 얻는 방법?
public class Outer
{
[Dependency]
public Func<Inner> InnerFactory { get; set; }
}
public class Inner
{
}
:
[TestMethod]
public void AutofacMakesThisEasy()
{
var builder = new ContainerBuilder();
builder.RegisterType<Outer>().PropertiesAutowired();
builder.RegisterType<Inner>().InstancePerOwned<Outer>();
var container = builder.Build();
var outer1 = container.Resolve<Owned<Outer>>().Value;
var inner1 = outer1.InnerFactory();
var inner2 = outer1.InnerFactory();
var outer2 = container.Resolve<Owned<Outer>>().Value;
var inner3 = outer2.InnerFactory();
var inner4 = outer2.InnerFactory();
Assert.AreNotSame(outer1, outer2, "outer1 == outer2");
Assert.AreSame(inner1, inner2, "inner1 != inner2");
Assert.AreNotSame(inner2, inner3, "inner2 == inner3");
Assert.AreSame(inner3, inner4, "inner3 != inner4");
}
다음 시험에 통과하기 위해 동일한 동작을 어떻게해야합니까?
[TestMethod]
public void UnityHasMeScratchingMyHead()
{
var container = new UnityContainer();
//// What shoud I do here?
var outer1 = container.Resolve<Outer>();
var inner1 = outer1.InnerFactory();
var inner2 = outer1.InnerFactory();
var outer2 = container.Resolve<Outer>();
var inner3 = outer2.InnerFactory();
var inner4 = outer2.InnerFactory();
Assert.AreNotSame(outer1, outer2, "outer1 == outer2");
Assert.AreSame(inner1, inner2, "inner1 != inner2");
Assert.AreNotSame(inner2, inner3, "inner2 == inner3");
Assert.AreSame(inner3, inner4, "inner3 != inner4");
}
참고 : 나는 사랑스러운 괜찮은 IOC의에 대한 유니티 도랑 싶지만, 그것은 매우 적극적인 판매 될 것입니다.
왜 아래 표를 보냅니 까? 이것은 명확하게 표현 된 질문입니다. – briantyler
[this] (http://msdn.microsoft.com/en-us/library/ff660895(v=pandp.20) .aspx) 및 [HierarchicalLifetimeManager] (http://msdn.microsoft.com/ en-us/library/microsoft.practices.unity.hierarchicallifetimemanager (v = pandp.51) .aspx)가 원하는 것일 수 있습니까? –
2 개월 후 팔릴 수 있었고 우리는 Autofac으로 옮겨서 Caliburn을 기반으로하는 자체 MVVM 프레임 워크를 위해 프리즘을 버렸습니다. 모든 컨벤션 기반 바인딩은 없었습니다. (어떤 종류의 스케일에도 도달하면 실제로는 혼란 스럽습니다.). 그것은 우리를 위해 매우 잘되었습니다. 나는 철저히 비슷한 위치에있는 사람에게 똑같이하도록 권합니다. – briantyler