public List<IBusinessObject> RetrieveAllBusinessObjects()
{
var businessObjectType= typeof(IBusinessObject);
List<Type> implementationsOfBusinessObject = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(businessObjectType.IsAssignableFrom).ToList();
return implementationsOfBusinessObject.Select(t =>(IBusinessObject)Activator.CreateInstance(t)).ToList();
}
我被堆栈溢出的用户建议我应该检查依赖注入作为上述snippit的解决方法。这有什么好处?
稍微概述一下情景:
我们的数据库几乎没有存储过程,所以我们已经开始为更复杂的表实现C#业务对象。由于我们希望很快就能切换数据库,这似乎是最好的选择。必须在运行时使用反射加载所有业务对象以帮助管理它们。所有这些业务对象都实现了IBusinessObject接口。
使用依赖注入的建议来自question
编辑:
RetrieveAllBusinessObjects方法位于接口后面的类中,因此可以直接测试
如果更改了任何内容,我们会使用AutoFac。我们不使用单独的配置文件。
-
答案 0 :(得分:1)
而不是使用上面的代码,您只需使用在应用程序的配置文件中配置的DI,但有时您也可以在方法中修饰属性或参数,然后将自动注入(通过映射集)当请求访问该对象时,或者在params中调用的方法中调用它时,以编程方式或通过配置方式启动。
它也使得它更容易测试,你可以创建实现接口的不同具体类型,然后不必重新编译代码,只需通过配置文件和中提琴轻弹映射...所有工作
答案 1 :(得分:0)
DI会在不必编写代码的情况下执行上述操作,因此您可以减少引入错误的机会。
DI为您提供了许多好处,例如
其他人可能会更好地描述其他好处,但您需要根据自己的需要对其进行评估。