Динамическое внедрение зависимостей во время выполнения - PullRequest
1 голос
/ 09 июня 2011

вот моя ситуация:

У меня есть приложение, которое генерирует материал на основе шаблонов (используя T4), и у меня есть несколько классов шаблонов, которые наследуются от интерфейса ITemplate.

Что я хочу сделатьв моем Main это динамически внедрить некоторые реализации ITemplate в мой класс Generator, какую реализацию использовать для чтения, скажем, из файла конфигурации.Затем в Main я должен вызвать Generator, который поймет, какой шаблон использовать, и вызвать правильный TransformText ().

Я использую Ninject.

Впервые я использую Dependency Injectionна статически типизированном языке, поэтому я не уверен, что делать дальше ...

С уважением,

Гюго

1 Ответ

0 голосов
/ 09 июня 2011

Если вы действительно хотите использовать DI здесь, простой пример, но если вы ищете что-то вроде системы плагинов, вы можете проверить mef .

Допустим, у вас есть генератор

public class Generator
{

   private ITemplate _template;
   public Generator(ITemplate t)
   {
      _template = t;

   }

   public void Generate()
   {
       _template.Generate();
   }
}

Настройте свои модули.

public class MyNinjectModules : NinjectModule
    {
        public override void Load()
        {
            Bind<ITemplate>().To< TemplateImplementation>();
            Bind<Generator>().ToSelf();
    }
}

, затем подготовьте ядро ​​Ninject и используйте его.

public class Program
{
   public static void Main(
   {
      var kernel = new StandardKernel(MyNinjectModules);
      var myGenerator =    kernel.Get<Generator>();
   }


}
...