【发布时间】:2014-12-23 09:21:02
【问题描述】:
想象一下我将通过工厂创建一些东西:
public sealed class MyClass
: IMyClass
{
private IMyDao MyDao { get; set; }
public MyClass(IMyDaoFactory factory)
{
MyDao = factory.MyDao;
}
}
这可以通过服务解决:
public sealed class MyService
: IMyService
{
private readonly IMyClass myClass;
public MyService(IMyDaoFactory factory)
{
myClass = new MyClass(factory);
}
}
这很容易在 Unity 中连接为:
var container = new UnityContainer();
container.RegisterType<IMyService, MyService>();
container.RegisterType<IMyDaoFactory, MyDaoFactory>();
container.RegisterType<IMyClass, MyClass>();
注意到 MyClass 的注册,我该如何设置 Unity 使其自动注册并通过工厂解析? IE。那么我不再需要:
myClass = new MyClass(factory);
仅:
this.myClass = myClass; (passed through the constructor
as IMyClass and resolved by Unity)
希望这是有道理的。提前致谢。
【问题讨论】:
-
出于好奇,考虑到接口暴露行为,为什么需要将接口转换为具体类型?
-
这是一种避免更深远的重构的尝试。如果我能做到这一点,我可以不理会整个数据层。
-
内森的回答似乎还可以;只需注册适当的依赖项,Unity 就会为您连接所有内容。例如IMyClass 将 IMyDaoFactory 注入其中。您还需要其他什么东西(可能是对象生命周期)?
标签: c# .net dependency-injection unity-container