Unity IoC,通过它的上下文解决构造函数依赖

时间:2015-06-01 19:58:36

标签: c# inversion-of-control unity-container ioc-container

我试图注册单个接口的多个实现,但我想避免使用命名类型注册。让我们说我有以下代码:

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,则让它解决)。)

还有其他方法可以让注册更容易吗? (我不关注这里的工厂 - 我可以想象其他非工厂化的用法需要类似的注册依赖关系的方式)

感谢您的任何建议:)

0 个答案:

没有答案