我正在使用Unity依賴注入框架。 我有兩個類,每個都在構造函數中使用相同的委託參數。解決問題時,每個班級都應該有不同的方法。 我可以在不使用屬性的情況下設置它嗎?如果不是,你將如何使用屬性來做到這一點?團結和代表
Q
團結和代表
3
A
回答
3
是的,你可以使用[Dependency]屬性修飾屬性或構造函數參數。
這個例子不使用的代表,它只是使用一個接口來代替,但它顯示了兩個相同的接口被用不同的名字註冊,並且要求類的構造函數中的特定的一個:
[TestClass]
public class NamedCI
{
internal interface ITestInterface
{
int GetValue();
}
internal class TestClassOne : ITestInterface
{
public int GetValue()
{
return 1;
}
}
internal class TestClassTwo : ITestInterface
{
public int GetValue()
{
return 2;
}
}
internal class ClassToResolve
{
public int Value { get; private set; }
public ClassToResolve([Dependency("ClassTwo")]ITestInterface testClass)
{
Value = testClass.GetValue();
}
}
[TestMethod]
public void Resolve_NamedCtorDependencyRegisteredLast_InjectsCorrectInstance()
{
using (IUnityContainer container = new UnityContainer())
{
container.RegisterType<ITestInterface, TestClassOne>("ClassOne");
container.RegisterType<ITestInterface, TestClassTwo>("ClassTwo");
container.RegisterType<ClassToResolve>();
var resolvedClass = container.Resolve<ClassToResolve>();
Assert.AreEqual<int>(2, resolvedClass.Value);
}
}
[TestMethod]
public void Resolve_NamedCtorDependencyRegisteredFirst_InjectsCorrectInstance()
{
using (IUnityContainer container = new UnityContainer())
{
container.RegisterType<ITestInterface, TestClassTwo>("ClassTwo");
container.RegisterType<ITestInterface, TestClassOne>("ClassOne");
container.RegisterType<ClassToResolve>();
var resolvedClass = container.Resolve<ClassToResolve>();
Assert.AreEqual<int>(2, resolvedClass.Value);
}
}
}
0
相反,您可以嘗試在對象的構造函數中傳遞工廠。這樣你可以保證(和測試)代碼中的對象是什麼創建。
相關問題
- 1. ws2007FederationHttpBinding和WIF代表團
- 2. 代表團和選擇器
- 3. 的LogonUser和代表團
- 4. OpenID代表團
- 5. Swift代表團
- 6. ASIHTTPRequest代表團
- 7. PHP kerberos代表團
- 8. 事件代表團
- 9. Vuejs - 事件代表團和v-的
- 10. 的iOS AwesomeMenu代表團和覆蓋
- 11. 安全和域範圍的代表團
- 12. jQuery事件代表團和祖先
- 13. 單身人士和代表團
- 14. 團結InjectionFactory和攔截
- 15. 團結和網絡服務
- 16. 團結和AdMob整合
- 17. 碰撞和團結碰撞
- 18. 團結和渴望Singleton
- 19. 團結攔截和構造
- 20. 團結
- 21. 團結
- 22. 團結
- 23. 在KineticJS事件代表團
- 24. 與階級代表團
- 25. 代表團戰略Groovy
- 26. 事件代表團問題
- 27. Touchstart事件代表團
- 28. 代表團妹妹類
- 29. 事件代表團目標
- 30. 代表團模式:PARENT_FIRST