在C#中实现依赖注入的不同方法有哪些?