在代码中,我有一个像
这样的变量A a = new A();
我想在app.config中配置A,所以我可以通过修改app.config来更改为B.我想知道我是否可以使用C#做到这一点?
答案 0 :(得分:3)
你会这样做有点不同,但使用的是dependency injection via an IoC (inversion of control) container。
我最喜欢的是ninject但您可以轻松地在某处找到它们的列表。
修改强> 我忘了提及Clay。它可以通过.net 4.0的新动态添加来做一些pretty rad stuff。
答案 1 :(得分:1)
您的意思是您希望基于类型名称将类型实例化为字符串?看看Activator.CreateInstance()。
答案 2 :(得分:0)
看看Castle Windsor,这是一个很好地满足您要求的成熟的开源项目。如果您不想直接使用该库,您可以浏览源代码以获得有关实现的想法。
答案 3 :(得分:0)
对我来说听起来这是错误的。
根据您发布的内容,我怀疑您希望能够在运行时使用大多数类似的(但不同的)类(取决于某种配置或运行时逻辑)。
为此,我强烈建议重新设计/重新考虑您的问题。对于Abstract Factory.的设计模式来说,这听起来是完美的用例(结合使用一些决策逻辑来决定你如何决定你想要实例化的具体类。
答案 4 :(得分:0)
正如大家所说,IoC容器是最佳选择。 或者你可以使用蛮力方式:
Assembly assembly = Assembly.Load(...);
var obj = assembly.CreateInstance(ConfigurationManager.AppSettings["MyDynamicType"], true);
return obj as IDynamicObject;