我可以使对象类型可配置吗?

时间:2011-01-20 15:01:48

标签: c# .net

在代码中,我有一个像

这样的变量
A a = new A();

我想在app.config中配置A,所以我可以通过修改app.config来更改为B.我想知道我是否可以使用C#做到这一点?

5 个答案:

答案 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;