0

我有一个类型列表。我需要通过名称在列表中找到匹配的类型。如果存在这种类型应该得到它的实例。类型列表存储在一个静态类中,该类扮演全局配置的角色并存储为应用程序配置的所有内容。向外部显示类型列表的接口的正确方法是什么,以便我可以轻松地按名称查找类型,获取我需要的类型,并且仍然不要将太多方法放入静态类并且不要不要陶醉太多的数据。

我正在考虑放置一些允许我按名称查找类型的接口,例如 IConfigurationSearchable。使配置返回此接口并针对它实现所有内容。灵活,不污染Configurator界面。但我决定询问 SO 以确保没有更好的方法来做到这一点。

我有一个静态类,允许我添加一些类。像这样:

configuration.Add(new Test()); configuration.Add(new AnotherTest()); configuration.Add(new SomeFancyName());

我想要一个允许我检查集合中包含名称 Test 的类的接口。也许稍后我会决定检查以 Test 开头的类是否在集合中,等等。我还需要按名称获取包含在那里的类或包含在那里的类列表。所以事情可能会发生变化,我不确定如何为我的配置器创建接口,这样就可以更轻松地进行更改。

4

2 回答 2

1

您可以查看一个简单的依赖注入容器,例如 TinyIoC: https ://github.com/grumpydev/TinyIoC

有了这个,您可以注册类型的实例,例如:

// register Foo
container.Register<Foo>();
...
// later on, get this instance by using:
var instance = container.Resolve<Foo>();

或者更好的是,注册一个接口和一个实现,然后在代码中,只使用接口:

// register Foo as the concrete implementation of IFoo
container.Register<IFoo, Foo>();
...
// later on, get a concrete instance that implements the IFoo interface
var foo = container.Resolve<IFoo>();

这将为您提供更改 Foo 实现的灵活性,而使用它的任何代码都将仅依赖于 IFoo 接口。

于 2012-11-12T20:59:01.697 回答
0

好的,不想回答我自己的问题,但由于答案数量相对较少(1)。我不介意将您在我自己之后发布的任何好的答案标记为答案。

我创建了一个接口 IGetTestable() 并将其作为方法从我的单例配置中返回。因此,如果在实施方面发生任何变化,我只需要更改实施即可。

我与我的集合交互的方式并没有被配置对象和它的方法所破坏。

于 2012-11-21T19:09:44.787 回答