我到目前为止看到像这样的样本:使用Ninject,我可以在不暴露具体类的情况下从界面创建实例吗?
编写代码是这样的...
public class Samurai {
public IWeapon Weapon { get; private set; }
public Samurai(IWeapon weapon) {
Weapon = weapon;
}
}
而且Ninject可以将接口映射到具体类型是这样的...
public class WarriorModule : NinjectModule {
public override void Load() {
Bind<IWeapon>().To<Sword>();
}
}
所以当我在我的武士物体中说var samurai = kernel.Get<Samurai>();
时,我的武器自动成为剑。
这很酷,但是如果我只想要没有武士的ISword,而具体的剑被标记为内部怎么办?
目前,我使用自制的依赖解析器,我可以说var sword = DependencyResolver.Current.Resolve<ISword>();
,它给了我一个剑作为ISword。我的具体类被标记为内部,所以开发人员必须通过我的依赖解析器创建一个实例。 Ninject有类似的东西吗?
还有一个额外的问题,我用自定义的“DefaultConcreteType”属性装饰我的接口,如果没有映射存在,我的依赖解析器可以使用该属性。 Ninject也有类似的东西吗?
感谢