【发布时间】:2013-03-20 21:44:56
【问题描述】:
如何在不使用任何内置或库(如 Autofac、Ninject 等)的情况下创建简单的 Dependency Resolver。
这是我的面试问题。
我写了这个简单的代码,他们说它看起来不太好。这就像非常硬编码的想法。
public interface IRepository { }
interface IDataProvider
{
List<string> GetData();
}
public class SQLDataProvider : IDataProvider
{
private readonly IRepository _repository { get; set; }
public SQLDataProvider(IRepository repository)
{
_repository = repository;
}
public List<string> GetData()
{
return new List<string> { "" };
}
}
public class MockDataProvider : IDataProvider
{
public List<string> GetData()
{
return new List<string> { "" };
}
}
class Program
{
static void Main(string[] args)
{
string targetClass = "SQLDataProvider";
//Here i need to supply IRepository instance too
IDataProvider dataProvider =
(IDataProvider)Activator.CreateInstance(typeof(IDataProvider), targetClass);
}
}
我做了哪些更好的代码并为构造函数参数提供其他对象实例?
【问题讨论】:
-
大部分 IoC 容器都是开源的,例如SimpleInjector 和 Autofac,让您可以窥探灵感。警告词 - 实施不是微不足道的。
-
在旁注中,这是一个令人难以置信的智障面试问题。
-
这个问题似乎是题外话,因为它基本上是要求进行代码审查。它属于“代码审查”。
-
我投票结束这个问题,因为它要求批评代码
标签: c# design-patterns dependency-injection