你好,首先我只是一个新手程序员,我刚刚发现依赖注入模式是如何工作的,它用于使我的代码更松散耦合。我不是特别知道如何配置Ninject来解决依赖关系,使用这些插件是否更好?
目前解决依赖关系的方法就是这样。
public class MyClass
{
IContract _contract = null;
MyClass()
{
}
MyClass(IContract contract)
{
_contract = contract;
}
public void DoSomething()
{
IContract concreteImplementation = _contract ?? new ConcreteContract();
concreteImplementation.MyMethod();
}
}
public class ConcreteContract : IContract
{
public void MyMethod()
{
//do something;
}
}
public interface IContract
{
void MyMethod();
}
答案 0 :(得分:1)
...爱德华
我想我会在评论中添加一些细节。 DI的好处就像你提到的那样(松散耦合)。此外,它允许您在编译和运行时注册contract
,具体取决于您的要求。因此,您可以添加新的实现,而不会破坏您希望解决的类。
您需要使用Unity
轻微的重构来实现目标。下面是一个小的自包含示例(控制台应用程序),使用您的类定义(并显示替代实现):
public class MyClass
{
readonly IContract _contract = null;
// do not include a paramterless ctor
// thus preventing class being created
// without a concrete implementation of IContract
public MyClass(IContract contract)
{
_contract = contract;
}
public void DoSomething()
{
_contract.MyMethod();
}
}
public class ConcreteContract : IContract
{
public ConcreteContract() { }
public void MyMethod()
{
//do something;
Debug.Print("Hello from the ConcreteContract class");
}
}
public class PlasticContract : IContract
{
public PlasticContract() { }
public void MyMethod()
{
//do something;
Debug.Print("Hello from the PlasticContract class");
}
}
public interface IContract
{
void MyMethod();
}
class Program
{
// add the nuget package Unity 1st
// Install-Package Unity
static void Main(string[] args)
{
// Declare a Unity Container -
// normally done once in the Startup/Bootstrap class
var unityContainer = new UnityContainer();
// Register IContract so when dependecy is detected
// it provides a ConcreteContract instance
// you could change this to <IContract, PlasticContract>
unityContainer.RegisterType<IContract, ConcreteContract>();
// Instance a MyClass class object through Unity
var preferredClass = unityContainer.Resolve<MyClass>();
preferredClass.DoSomething();
}
}
希望这能让你进入下一阶段。