1
Ninject의 NamedScope 모듈이 어떻게 작동하는지 이해하려고 힘들게 노력하고 있습니다. 내 마음 속에서 각 (정의 된) 범위는 "InNamedScope"인 바인딩을 상황화하는 데 사용해야합니다. 나를 위해Ninject NamedScope의 올바른 사용
void Main()
{
var kernel = new StandardKernel(new NamedScopeModule(), new ContextPreservationModule());
kernel.Bind<ParentC>().ToSelf().WithConstructorArgument("name", "Name1").DefinesNamedScope("scope1");
kernel.Bind<Intf>().ToConstant(new MyC() { ID = 1}).InNamedScope("scope1");
kernel.Bind<ParentC>().ToSelf().WithConstructorArgument("name", "Name2").DefinesNamedScope("scope2");
kernel.Bind<Intf>().ToConstant(new MyC() { ID = 2 }).InNamedScope("scope2");
kernel.GetAll<ParentC>().Dump();
}
public class Intf
{
int ID { get; set; }
}
public class MyC : Intf
{
public int ID { get; set; }
}
public class ParentC
{
public ParentC(Intf[] c, string name)
{
this.C = c;
Name = name;
}
public string Name { get; set; }
public Intf[] C { get; set; }
}
는이 같은 양보해야합니다 :
을하지만 그 대신, 내가 예외에 얻을 :
UnknownScopeException을이 장난감 예와
: UserQuery + Intf 활성화 오류 scope2는 유효하지 않습니다. 현재 상황에서 알려져있다.
무엇이 누락 되었습니까?
그것은 의미가 있습니다, 나는 ninject 범위의 목적을 오해 한 것 같아요. 내가 성취하려는 일을하는 확장이 있습니까? 아니면'Named (..)'과'WhenAnyAncestorNamed (..)'를 사용해야합니까? –
예,'Named (...)'와'WhenAnyAncestorNamed (...)'가 아마 작동 할 것입니다. 당신의 장난감 예제는 또 다른 SO 질문을 생각 나게합니다. https://stackoverflow.com/questions/43864334/ninject-binding-a-tree-of-data 그리고 Ninject를 사용하여 데이터 중심이 아닌 구성 요소의 그래프를 바인딩하는 것이 좋습니다 사물. –
동의합니다.이 예제를 단순화하기위한 것이 었습니다. 실제 문제는 NamedScope를 사용하여 다른 클래스에 다른 바인딩을 사용하려고 시도하는 것이 었습니다. 도와 줘서 고맙다. –