好吧,我不知道"强命名"是否是正确的术语,但我想做的是如下.
目前我使用ConstructorArgument,例如:
public class Ninja
{
private readonly IWeapon _weapon;
private readonly string _name;
public Ninja(string name, IWeapon weapon)
{
_weapon = weapon;
_name = name;
}
// ..more code..
}
public void SomeFunction()
{
var kernel = new StandardKernel();
kernel.Bind<IWeapon>().To<Sword>();
var ninja = kernel.Get<Ninja>(new ConstructorArgument("name", "Lee"));
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我重命名参数"name"(例如使用ReSharper),ConstructorArgument将不会更新,并且在创建Ninja时我将收到运行时错误.要解决这个问题,我需要手动查找我通过ConstructorArgument指定此参数的所有位置并更新它.没有好处,即使我有很好的测试覆盖率,我注定会在某些时候失败.重命名应该是一个廉价的操作.
有没有什么方法可以引用参数 - 这样当我重命名参数时它会被更新?
使用Ninjects ConstructorArgument时,您可以指定要注入特定参数的确切值.为什么这个值不能为null,或者我怎样才能使它工作?也许这不是你想做的事情,但我想在我的单元测试中使用它.例如:
public class Ninja
{
private readonly IWeapon _weapon;
public Ninja(IWeapon weapon)
{
_weapon = weapon;
}
}
public void SomeFunction()
{
var kernel = new StandardKernel();
var ninja = kernel.Get<Ninja>(new ConstructorArgument("weapon", null));
}
Run Code Online (Sandbox Code Playgroud) 好的,所以如果我需要在构造函数中放入一些原始值,我该怎么做?
@Autowired
public CustomBean(String name, @Qualifier("SuperBean") SuperBean superBean) {
super();
this.superBean = superBean;
this.name = name;
}
Run Code Online (Sandbox Code Playgroud)
例如,我在这里定义superBean有限定符"SuperBean",但我也想知道如何使用注释在这里设置名称值?
我知道有可能使用xml配置,但我想知道如何使用注释执行此操作:
<bean id="CustomXmlBean" class="org.arturas.summerfav.beans.CustomXmlBean">
<constructor-arg name="name" type="String" value="The Big Custom XML Bean" />
<constructor-arg>
<bean id="SuperBean" class="org.arturas.summerfav.beans.SuperBean" />
</constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)
那么我如何为String,int和其他泛型类型输入值?
java spring dependency-injection spring-annotations constructorargument
这是我在这里的第一个问题:)我有一点问题..这些是我的课程:
class Gracz{
char znak_gracza;
public:
Gracz();
Gracz(char znak){
this->znak_gracza = znak;
};
friend void multiplayer();
};
class Osoba: public Gracz{
public:
Osoba();
Osoba(char znak){
this->znak_gracza = znak;
};
friend void multiplayer();
};
Run Code Online (Sandbox Code Playgroud)
我也有一个功能多人游戏,我尝试使用构造函数与参数:
void multiplayer(){
Osoba gracz1('O');
Osoba gracz2('X');
...
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
错误是一样的gracz1,并gracz2
error C2248: 'Gracz::znak_gracza' : cannot access private member declared in class 'Gracz'
see declaration of 'Gracz::znak_gracza'
see declaration of 'Gracz'
Run Code Online (Sandbox Code Playgroud) .net ×2
ninject ×2
c++ ×1
class ×1
constructor ×1
java ×1
naming ×1
ninject-2 ×1
refactoring ×1
spring ×1