Решил применить MEF для связи между различными модулями. На мой взгляд это удобно, особенно если делить написание модулей между людьми.
Поскольку ранее не пользовался, есть непонятки. Прошу плз спецов ответить.
Когда один импорт (ImportMany) выдаёт на несколько экспортов, это понятно.
А вот когда наоборот, экспорт один, а импортов много. Только что попробовал — работает.
Но непонятно, надёжно ли это? Ведь дёргать экспорт могут разные потоки, не будет ли состязаний, а главное, их последствий?
Или "внутри" MEF-а всё уже разрулено и синхронные вызовы преобразуются в асинхронные?
Будут ещё пара вопросов, но сначала ответьте на этот плз.
Здравствуйте, Dimonira, Вы писали:
D>Решил применить MEF для связи между различными модулями. На мой взгляд это удобно, особенно если делить написание модулей между людьми. D>Поскольку ранее не пользовался, есть непонятки. Прошу плз спецов ответить. D>Когда один импорт (ImportMany) выдаёт на несколько экспортов, это понятно. D>А вот когда наоборот, экспорт один, а импортов много. Только что попробовал — работает. D>Но непонятно, надёжно ли это? Ведь дёргать экспорт могут разные потоки, не будет ли состязаний, а главное, их последствий? D>Или "внутри" MEF-а всё уже разрулено и синхронные вызовы преобразуются в асинхронные?
MEF не стоит использовать таким образом. Ты хочешь эмулировать IoC, а потому лучше взять готовый, Unity тот же. MeF предназначен в основном для всяких расширений.
Здравствуйте, Dimonira, Вы писали:
D>Решил применить MEF для связи между различными модулями. На мой взгляд это удобно, особенно если делить написание модулей между людьми. D>Поскольку ранее не пользовался, есть непонятки. Прошу плз спецов ответить. D>Когда один импорт (ImportMany) выдаёт на несколько экспортов, это понятно. D>А вот когда наоборот, экспорт один, а импортов много. Только что попробовал — работает. D>Но непонятно, надёжно ли это? Ведь дёргать экспорт могут разные потоки, не будет ли состязаний, а главное, их последствий? D>Или "внутри" MEF-а всё уже разрулено и синхронные вызовы преобразуются в асинхронные? D>Будут ещё пара вопросов, но сначала ответьте на этот плз.
Composition происходит один раз, никакого thread safety не заложено в MEF, об этом ты, как всегда, должен заботиться сам.
Другой вопрос. Не поняли пока можно ли делать "принудительную" композицию между определёнными модулями с одинаковыми интерфейсами?
Например, есть два модуля с одинаковым импортом и два с одинаковым экспортом.
Если делать композицию из солянки этих модулей, то каждый импорт соединится с обоими экспортами.
А мне надо каждый конкретный импорт соединить с конкретным экспортом, т.е. иметь две разные пары соединения. Можно ли это состряпать?
При этом хотелось бы как-то "распознавать" модули, чтобы понимать кого с кем соединять. Может через метаданные?
Или может просто сначала в две кучки собирать модули по именам файлов?
Может ли быть две композиции (или более) одновременно (хотя такой случай вряд ли нужен)?
Здравствуйте, Аноним, Вы писали: А>MEF не стоит использовать таким образом. Ты хочешь эмулировать IoC, а потому лучше взять готовый, Unity тот же. MeF предназначен в основном для всяких расширений.
Где этот Unity искать?
Здравствуйте, Dimonira, Вы писали:
D>Другой вопрос. Не поняли пока можно ли делать "принудительную" композицию между определёнными модулями с одинаковыми интерфейсами? D>Например, есть два модуля с одинаковым импортом и два с одинаковым экспортом. D>Если делать композицию из солянки этих модулей, то каждый импорт соединится с обоими экспортами. D>А мне надо каждый конкретный импорт соединить с конкретным экспортом, т.е. иметь две разные пары соединения. Можно ли это состряпать? D>При этом хотелось бы как-то "распознавать" модули, чтобы понимать кого с кем соединять. Может через метаданные? D>Или может просто сначала в две кучки собирать модули по именам файлов? D>Может ли быть две композиции (или более) одновременно (хотя такой случай вряд ли нужен)?
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, Dimonira, Вы писали:
D>>Другой вопрос. Не поняли пока можно ли делать "принудительную" композицию между определёнными модулями с одинаковыми интерфейсами? D>>Например, есть два модуля с одинаковым импортом и два с одинаковым экспортом. D>>Если делать композицию из солянки этих модулей, то каждый импорт соединится с обоими экспортами. D>>А мне надо каждый конкретный импорт соединить с конкретным экспортом, т.е. иметь две разные пары соединения. Можно ли это состряпать? D>>При этом хотелось бы как-то "распознавать" модули, чтобы понимать кого с кем соединять. Может через метаданные? D>>Или может просто сначала в две кучки собирать модули по именам файлов? D>>Может ли быть две композиции (или более) одновременно (хотя такой случай вряд ли нужен)?
G>Да, гугли parts metadata.
Извините, не понял))) "Да" — это ответ на какой вопрос?
Здравствуйте, Dimonira, Вы писали:
D>Здравствуйте, gandjustas, Вы писали:
G>>Здравствуйте, Dimonira, Вы писали:
D>>>Другой вопрос. Не поняли пока можно ли делать "принудительную" композицию между определёнными модулями с одинаковыми интерфейсами? D>>>Например, есть два модуля с одинаковым импортом и два с одинаковым экспортом. D>>>Если делать композицию из солянки этих модулей, то каждый импорт соединится с обоими экспортами. D>>>А мне надо каждый конкретный импорт соединить с конкретным экспортом, т.е. иметь две разные пары соединения. Можно ли это состряпать? D>>>При этом хотелось бы как-то "распознавать" модули, чтобы понимать кого с кем соединять. Может через метаданные? D>>>Или может просто сначала в две кучки собирать модули по именам файлов? D>>>Может ли быть две композиции (или более) одновременно (хотя такой случай вряд ли нужен)?
G>>Да, гугли parts metadata. D>Извините, не понял))) "Да" — это ответ на какой вопрос?
Собственно на все. Есть метаданные у партов, кроме типа импорта, можно также указывать необходимые метаданные. Также метаданные можно запрашивать императивно в коде. Этот механизм позволит реализовать все что написано.
Здравствуйте, gandjustas, Вы писали:
G>>>Да, гугли parts metadata. D>>Извините, не понял))) "Да" — это ответ на какой вопрос?
G>Собственно на все. Есть метаданные у партов, кроме типа импорта, можно также указывать необходимые метаданные. Также метаданные можно запрашивать императивно в коде. Этот механизм позволит реализовать все что написано.
Здравствуйте, Dimonira, Вы писали:
А>>MEF не стоит использовать таким образом. Ты хочешь эмулировать IoC, а потому лучше взять готовый, Unity тот же. MeF предназначен в основном для всяких расширений. D>Где этот Unity искать? Microsoft Unity 2.1