【问题标题】:Ninject Binding IssueNinject 绑定问题
【发布时间】:2015-03-04 13:12:50
【问题描述】:

我有一个 wcf 服务应用程序,并且我刚刚实现了 ninject 库。在ninject网站有以下例子:

public class Samurai {
    public IWeapon Weapon { get; private set; }
    public Samurai(IWeapon weapon) 
    {
        this.Weapon = weapon;
    }
}

public class WarriorModule : NinjectModule
{
    public override void Load() 
    {
        this.Bind<IWeapon>().To<Sword>();
    }
}

我有这样的课程。但问题是如何创建Samurai 类的实例?它的构造函数有参数(IWeapon),但参数绑定Sword或不同的类。当我想创建Samurai 类的实例时,编译器需要IWeapon 类型参数。在我的模块类(如WarriorModule)中,我已经定义了它的绑定。如何将参数(或其他方式)传递给Samurai 类的构造函数?

【问题讨论】:

    标签: c# wcf ninject


    【解决方案1】:

    试试这个

    class Program
    {
        static void Main(string[] args)
        {
            IKernel kernel = new StandardKernel(new WarriorModule());
            var samurai = kernel.Get<ISamurai>();
        }
    }
    
    public interface ISamurai
    {
    }
    
    public class Samurai : ISamurai
    {
        public IWeapon Weapon { get; private set; }
        public Samurai(IWeapon weapon)
        {
            this.Weapon = weapon;
        }
    }
    
    public interface IWeapon
    {
    
    }
    
    public class Sword : IWeapon
    {
    
    }
    
    public class WarriorModule : NinjectModule
    {
        public override void Load()
        {
            this.Bind<ISamurai>().To<Samurai>();
            this.Bind<IWeapon>().To<Sword>();
        }
    }
    

    【讨论】:

    • 我的项目有多个层,根据这个例子,IWeapon 和 samurai 类存在于不同的层上。要为该层内的所有类(Samurai 类层)添加接口,需要额外的工作量。我能以不同的方式实现吗?
    【解决方案2】:

    我只是想出了该怎么做。无需创建 ISamurai 界面。在战士模块中:

    public class WarriorModule : NinjectModule
    {
        public override void Load() 
        {
            Bind<IWeapon>().To<Sword>();
            Bind<Samurai>().ToSelf();
        }
    }
    

    创建 Samurai 实例:

    var samurai = kernel.Get<Samurai>();
    

    【讨论】:

    • 一句警告;确保您确定您对 Samurai 作为不可变类类型感到满意。我完全不反对自绑定类型,只要确保你总是对注入一个类而不是一个可以在需要时换出的类感到满意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2012-11-14
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多