инжекция кода и значений переменных
От: Kluev  
Дата: 05.05.17 12:53
Оценка:
Есть ли механизмы позволяющие сделать следующее?
Значение переменной 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();
        }
    }
Re: инжекция кода и значений переменных
От: Sharov Россия  
Дата: 05.05.17 13:11
Оценка:
Здравствуйте, 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 ?
Кодом людям нужно помогать!
Re: инжекция кода и значений переменных
От: Sinix  
Дата: 05.05.17 16:38
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Есть ли механизмы позволяющие сделать следующее?

K>Значение переменной key и код метода GetSome инжектируется перед выполнением программы исходя из назначенных аттрибутов?

Можно без инжекта обойтись, вытаскивать рефлексией значение атрибута + сделать переменные readonly. JIT инлайнит значения static-readonly переменных как константы.

Но тёмную сторону чую я в коде этом. В смысле, почему не
        public static readonly string Key = "FooBar";

?
Отредактировано 05.05.2017 16:39 Sinix . Предыдущая версия .
Re: инжекция кода и значений переменных
От: okon  
Дата: 07.05.17 16:03
Оценка:
Здравствуйте, 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();
    } 
}


Ну а если код хочется в рантайме генерить и компилить то это также можно сделать, именно компиляция кода в райнтайме это уже отдельная задача, не связанная с ресолвом реализации
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.