我有一个类型列表。我需要通过它的名字在列表中找到匹配的类型。如果这种类型存在应该得到它的实例。类型列表存储在一个静态类中,该类扮演全局配置的角色并存储为应用程序配置的所有内容。 向外部显示类型列表的接口的正确方法是什么,以便我可以轻松地按名称查找类型,获取我需要的类型,但仍然不会将太多方法放入静态类中不要抱太多数据。
我正在考虑放置一些允许我按名称查找类型的界面,比如IConfigurationSearchable。使配置返回此接口并针对它实现所有内容。灵活,无污染的Configurator界面。但我决定要求SO确保没有更好的方法来做到这一点。
我有一个静态类,允许我添加一些类。像这样:
configuration.Add(new Test());
configuration.Add(new AnotherTest());
configuration.Add(new SomeFancyName());
我想要一个允许我检查的接口是包含在集合中的名称Test的类。也许以后我会决定检查以Test开头的类是否在集合中等等。另外,我需要通过名称获取包含那里的类或包含在那里的类列表。所以事情可能会发生变化,我不知道如何为我的配置器创建接口,这样就可以轻松地改变变化。
答案 0 :(得分: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接口。
答案 1 :(得分:0)
好的,不想回答我自己的问题,但答案的数量相对较少(1)。我不介意回答你在我自己之后发布的任何好答案。
我创建了一个接口IGetTestable()并将其作为方法从我的单例配置中返回。 因此,如果在实现方面有任何变化,我只需要更改实现。
我与我的馆藏互动的方式并没有围绕配置对象及其方法进行粉碎。