我试图注册单个接口的多个实现,但我想避免使用命名类型注册。让我们说我有以下代码:
public interface IStorage { ... }
public class DocumentStorage : IStorage { ... }
public class ImageStorage : IStorage { ... }
public interface IRepository { ... }
public class DocumentRepository : IRepository
{
public DocumentRepository(IStorage storage /*, ... and other dependencies */) { ... }
}
在单个文件上执行所有Unity IoC注册。其余的应用程序无法访问容器(+服务定位器模式很大,我的代码中没有)
注册它将如下所示:
container.RegisterType<IStorage, DocumentStorage>("document");
container.RegisterType<IStorage, ImageStorage>("image");
container.RegisterType<IRepository, DocumentRepository>(
new InjectionFactory((c, t, s) => new DocumentRepository(
c.Resolve<IStorage>("document") /*, ... resolve other deps here */)));
这就是我的懒惰问题 - 我真的不想以这种方式解决所有依赖关系 - 这让IoC很麻烦。我必须根据IStorage
实现之一进行所有注册,并手动解决所有其他依赖项。
我正在考虑通过注册由DocumentStorage
解决的DocumentRepository
来改变解决方案 - 这是我无法弄清楚的,此外,它正依赖于&的另一方面#34;等式&#34; (&#34;注册到另一种类型的注册类型&#34;(而不是&#34;寄存器类型,如果有什么东西依赖于#34,则让它解决)。)
还有其他方法可以让注册更容易吗? (我不关注这里的工厂 - 我可以想象其他非工厂化的用法需要类似的注册依赖关系的方式)
感谢您的任何建议:)