我正在使用 UnityContainer,并且我想注册一个接口,而不是使用类型,而是使用另一个接口。
不幸的是,我无法干净地做到这一点..
我有几个常用的接口,它们统一在一个接口中,我需要将它们注册到容器中。代码如下:
interface IDeviceImporter {
void ImportFromDevice();
}
interface IFileImporter {
void ImportFromFile();
}
interface IImporter : IDeviceImporter, IFileImporter {
}
class Importer1: IImporter {
}
class Importer2: IImporter {
}
当进入库时,我知道要使用哪个导入器,所以代码如下:
var container = new UnityContainer();
if (useFirstImport) {
container.RegisterType<IImporter, Importer1>();
} else {
container.RegisterType<IImporter, Importer2>();
}
然后我想向 IDeviceImporter 和 IFileImporter 注册这个特定的类。我需要类似的东西:
container.RegisterType<IDeviceImporter, IImporter>();
但使用该代码我收到错误:IImporter is an interface and cannot be constructed
.
我可以在条件内执行此操作,但随后它将被复制粘贴。我可以
container.RegisterInstance<IDeviceImporter>(container.Resolve<IImporter>());
但它真的很脏。
请任何人给我一些建议:)