У меня есть один объект контекста, с которым я хочу иметь доступ из большого количества классов различий. У меня есть код, который выглядит какАльтернативы прохождению объекта контекста
Context ctx = new Context();
Section section = new Section(ctx) {
Data1 = new SomeData(ctx) { Value = 123 },
Data2 = new SomeOtherData(ctx) { Foo = "bar" },
SubSection = new Section(ctx) {
MoreData = new MoreData(ctx) { Text = "Hello!" }
}
};
Но я бы очень хотел, это код, который выглядит следующим образом:
using(Context.New()) {
Section section = new Section() {
Data1 = new SomeData { Value = 123 },
Data2 = new SomeOtherData { Foo = "bar" },
SubSection = new Section {
MoreData = new MoreData { Text = "Hello!" }
}
};
// do something with section
}
Возможно ли это? Я буду использовать его в ASP.NET, а также в .exes (и, вероятно, что-то еще в будущем), поэтому я не могу просто хранить static
или где-то ссылаться на локальную ссылку.
Это не должно быть точно так же, как указано выше, только так, чтобы мне не пришлось передавать контекст каждому объекту, который я создаю. Я думал об использовании методов расширения, таких как context.createSomeData()
, но для этого требуется больше шаблонов для каждого класса и на самом деле не лучше, поскольку вам все еще нужен объект контекста.
Идеально должен работать под VS2008/.NET3.5, хотя мне все равно будет интересно, если есть какой-либо способ сделать это вообще.
UPDATE: Я в конечном итоге решение этого рефакторинга мой подход в следующем:
Section section = new Section {
Data1 = new SomeData { Value = 123 },
Data2 = new SomeOtherData { Foo = "bar" },
SubSection = new Section {
MoreData = new MoreData { Text = "Hello!" }
}
};
section.DoStuffWithContext(new Context());
Хотя он может не работать для всех, это то, что мне нужно здесь.
Я оставлю этот вопрос открытым, если кто-то придумает хорошее решение исходной проблемы.
Будет ли 'новый раздел (ctx) {Data1 = new SomeData {...}, Data2 = new SomeOtherData {...}, ...}' быть достаточно хорошим? Если это так, вы можете изменить настройки свойств класса 'Section', чтобы передать контекст назначенным значениям. – hvd
Это хороший момент, хотя это было бы «много» шаблона. Я хочу, чтобы другие могли создавать классы, которые расширяют эти классы; текущий обязательный однострочный конструктор достаточно прост, но определить сложные сеттеры для каждого свойства будет немного. –