#c# #ninject #named-scope
#c# #девятый объект #именованная область
Вопрос:
Мне очень трудно понять разницу между Ninject DefinesNamedScope и InNamedScope. Возможно, мое понимание сферы охвата неверно?!
Я пытаюсь использовать группу экземпляров как многоразовую, как только эта группа, определенная именем области, будет доступна, изменена, в приложении будет изменено все.
Я вижу примеры в документации, но не могу перевести их в свои собственные проекты, см. Пример ниже:
Я пытаюсь сделать IClassA, IClassB «идущими вместе», но не 2 других.
private void Button_Click_4(object sender, RoutedEventArgs e) { string scopeA = "scopeA"; var container = new StandardKernel(new MainModule()); var classRoot1 = container.CreateNamedScope(scopeA).Getlt;IClassRoot1gt;(); var classA1 = container.CreateNamedScope(scopeA).Getlt;IClassAgt;(); var classA2 = container.CreateNamedScope(scopeA).Getlt;IClassAgt;(); var classB1 = container.CreateNamedScope(scopeA).Getlt;IClassBgt;(); var classB2 = container.CreateNamedScope(scopeA).Getlt;IClassBgt;(); var classC1 = container.Getlt;IClassCgt;(); var classC2 = container.Getlt;IClassCgt;(); var classD2 = container.Getlt;IClassDgt;(); var classD1 = container.Getlt;IClassDgt;(); (classA1 as IJustProperty).Name = "a1"; (classA2 as IJustProperty).Name = "a2"; (classB1 as IJustProperty).Name = "b1"; (classB2 as IJustProperty).Name = "b2"; (classC1 as IJustProperty).Name = "c1"; (classC2 as IJustProperty).Name = "c2"; } public class MainModule : NinjectModule { public override void Load() { string scopeA = "scopeA"; Bindlt;IClassAgt;().Tolt;ClassAgt;().DefinesNamedScope(scopeA); Bindlt;IClassBgt;().Tolt;ClassBgt;().InNamedScope(scopeA); Bindlt;IClassCgt;().Tolt;ClassCgt;(); Bindlt;IClassDgt;().Tolt;ClassDgt;(); } } public interface IJustProperty { string Name { get; set; } DateTime Created { get; set; } int Number { get; set; } } public class ClassRoot1 : IClassRoot1 { } public interface IClassRoot1 { } public class ClassA : IClassA, IJustProperty { public string Name { get; set; } public DateTime Created { get; set; } public int Number { get; set; } } public interface IClassA { } public class ClassB : IClassB, IJustProperty { private readonly IClassA _classA; public ClassB(IClassA classA) { _classA = classA; } public string Name { get; set; } public DateTime Created { get; set; } public int Number { get; set; } } public interface IClassB { } public class ClassC : IClassC, IJustProperty { private readonly IClassB _classB; public ClassC(IClassB classB) { _classB = classB; } public string Name { get; set; } public DateTime Created { get; set; } public int Number { get; set; } } public interface IClassC { } public class ClassD : IClassD, IJustProperty { private readonly IClassC _classC; public ClassD(IClassC classC) { _classC = classC; } public string Name { get; set; } public DateTime Created { get; set; } public int Number { get; set; } } public interface IClassD { }