C# 动态运行时依赖注入

C# 动态运行时依赖注入,c#,dynamic,dependency-injection,ninject,t4,C#,Dynamic,Dependency Injection,Ninject,T4,我的情况如下: 我有一个基于模板生成内容的应用程序(使用T4),我有多个从ITemplate接口继承的模板类 我主要想做的是在我的生成器类中以友好的方式注入一些ITemplate实现,从配置文件中读取要使用的实现。然后,我主要应该调用生成器来理解要使用的模板,并调用适当的TransformText() 我用的是Ninject 这是我第一次在静态类型语言中使用依赖项注入,所以我不确定如何继续 问候, Hugo如果你真的想使用DI,这里有一个简单的例子,但如果你正在搜索插件系统之类的东西,你可能会想

我的情况如下:

我有一个基于模板生成内容的应用程序(使用T4),我有多个从ITemplate接口继承的模板类

我主要想做的是在我的生成器类中以友好的方式注入一些ITemplate实现,从配置文件中读取要使用的实现。然后,我主要应该调用生成器来理解要使用的模板,并调用适当的TransformText()

我用的是Ninject

这是我第一次在静态类型语言中使用依赖项注入,所以我不确定如何继续

问候,


Hugo

如果你真的想使用DI,这里有一个简单的例子,但如果你正在搜索插件系统之类的东西,你可能会想看看

假设你有一个发电机

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();
    }
}
公共类MyNinjectModules:NinjectModule
{
公共覆盖无效负载()
{
绑定()到();
Bind().ToSelf();
}
}
然后准备你的Ninject内核,并使用它

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


}
公共类程序
{
公共静态真空总管(
{
var kernel=新的标准内核(MyNinjectModules);
var myGenerator=kernel.Get();
}
}