我是依赖注入模式的新手。请查看以下方案。现在,我的下面的代码是紧密耦合的。我想让它轻松耦合。
有人可以帮助我使用Unity实现依赖注入吗?
// Implementation of class A
public class A
{
public B b{get;set;}
public A(B b,string c)
{
this.b=b;
this.A(b,c);
}
}
//Implementation of Class B
public class B
{
public int value1 {get;private set;}
public string stringValue {get;private set;}
public B(int value,string strValue)
{
this.value1=value;
this.stringValue=strValue;
}
}
//Implementation of class C
public class C
{
public void Dosomething()
{
B b=null;
string value="Something";
// Here I need to implement unity to resolve tight coupling
// without creating object of Class A
A a=new A(b,value);
}
}
我根据可能的重复问题累了一些东西。但我仍面临同样的问题。
我应该如何在Unity中注册这个具有参数化构造函数的类型?
我已经实现了以下代码
,而不是这一行 A a=new A(b,value);
var container=new UnityContainer();
container.RegisterType<A>();
container.RegisterType<B>();
A a=new A(b,container.ResolveType<B>();
但它没有帮助我。
答案 0 :(得分:1)
首先,我会建议你通过引入接口来进一步解耦你的类,所以你可以按如下方式实现C类:
public class C
{
private readonly IA a;
private readonly IB b;
public C(IA a, IB b)
{
this.a = a;
this.b = b;
}
public void Dosomething()
{
// do something with this.a or this.b.
}
}
然后您可以注册并解决您的课程,如下所示:
var container = new UnityContainer();
container.RegisterType<IB, B>(new InjectionConstructor(1, "Test"));
container.RegisterType<IA, A>(new InjectionConstructor(new ResolvedParameter<IB>(),"Test"));
container.RegisterType<IC, C>();
var c = container.Resolve<IC>();
虽然我建议采用上述方法,但您也可以在解决时规定注射值,例如:
container.RegisterType<IB, B>();
container.Resolve<IB>(
new ParameterOverride("value", 1),
new ParameterOverride("strValue", "Test"));