Есть ли механизмы позволяющие сделать следующее?
Значение переменной key и код метода GetSome инжектируется перед выполнением программы исходя из назначенных аттрибутов?
class Program
{
[Injected("FooBar")]
public static string key;
[Injected("BarFoo")]
public string GetSome();
static void test()
{
string s = Program.key;
string q = Program.GetSome();
}
}
Здравствуйте, Kluev, Вы писали:
K>Есть ли механизмы позволяющие сделать следующее?
K>Значение переменной key и код метода GetSome инжектируется перед выполнением программы исходя из назначенных аттрибутов?
K>K> class Program
K> {
K> [Injected("FooBar")]
K> public static string key;
K> [Injected("BarFoo")]
K> public string GetSome();
K> static void test()
K> {
K> string s = Program.key;
K> string q = Program.GetSome();
K> }
K> }
K>
AOP --
https://www.postsharp.net/aop.net ?
Здравствуйте, Kluev, Вы писали:
K>Есть ли механизмы позволяющие сделать следующее?
K>Значение переменной key и код метода GetSome инжектируется перед выполнением программы исходя из назначенных аттрибутов?
Можно без инжекта обойтись, вытаскивать рефлексией значение атрибута + сделать переменные readonly. JIT инлайнит значения static-readonly переменных как константы.
Но тёмную сторону чую я в коде этом. В смысле, почему не
public static readonly string Key = "FooBar";
?
Здравствуйте, Kluev, Вы писали:
K>Есть ли механизмы позволяющие сделать следующее?
K>Значение переменной key и код метода GetSome инжектируется перед выполнением программы исходя из назначенных аттрибутов?
K>K> class Program
K> {
K> [Injected("FooBar")]
K> public static string key;
K> [Injected("BarFoo")]
K> public string GetSome();
K> static void test()
K> {
K> string s = Program.key;
K> string q = Program.GetSome();
K> }
K> }
K>
А зачем инжектить код, вот так не подойдет ?
public class SomeClass1 : IGetSome
{
string GetSome{ // код раз }
}
public class SomeClass2 : IGetSome
{
string GetSome{ // код два }
}
class Program
{
IGetSome GetSomeService;
static void Test()
{
GetSomeService = IoC.Resolve<IGetSome>();
string q = GetSomeService.GetSome();
}
}
Ну а если код хочется в рантайме генерить и компилить то это также можно сделать, именно компиляция кода в райнтайме это уже отдельная задача, не связанная с ресолвом реализации
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов