【发布时间】:2010-11-08 19:38:18
【问题描述】:
我编写了一个解析器,因此我可以拥有一个非常原始的 DI 框架。在框架中,如果没有指定或注册任何内容,我允许依赖解析器指定要加载的默认类型。
但是,我执行默认加载的方式让我感到疑惑。我不确定我是否以最好的方式做到这一点。
例子:
T LoadDefaultForType<T>()
{
T _result = default(T);
if (typeof(T) == typeof(ISomeThing)
{
result = new SomeThing();
}
... more of the same
else
{
throw new NotSupportException("Give me something I can work with!");
}
return _result;
}
更新
如果模块或程序集没有为接口配置具体类型,则使用它来获取给定接口的默认对象。
例如:
IoC.Resolve<ISomeThing>();
如果没有向 ISomeThing 注册任何其他内容,则需要将 SomeThing 对象返回给我。在这种情况下, LoadDefaultForType 是使用默认值的最后努力(在这种情况下,无论我的域模型是什么)。
Resolve 也可能对此有所启发:
T Resolve<T>()
{
T _result = default(T);
if (ContainedObjects.ContainsKey(typeof(T))
_result = (T)ContainedObjects[typeof(T)];
else
_result = LoadDefaultForType<T>();
return _result;
}
有什么想法吗?鉴于我试图允许约定优于配置的方法,是否有更好的方法来加载默认类型?
【问题讨论】: