Sav*_*dis 7 inversion-of-control unity-container
在一个新的WPF项目(VS2010)中,我第一次使用Unity 2.在这个项目中,我使用以下结构:
解
WPF项目
类库1
班级图书馆2
班级图书馆3 ....
使用Unity注册不同类型是在WPF Project中使用以下代码段完成的:
IUnityContainer container = new UnityContainer()
.RegisterType<IObjectContext, ObjectContextAdapter>()
.RegisterType<IConnectionStringProvider, ConnectionStringProvider>()
.RegisterType(typeof(IRepository<>), typeof(Repository<>));
Run Code Online (Sandbox Code Playgroud)
现在让我说我想<Orders
在类库1中解析Repository > constructor-inject.显然,容器在其他项目中并不为人所知!
我该怎么做?
Rya*_*yan 10
我大多同意Chris的回答,但我认为配置文件很笨(特别是对于Unity)所以这里有一个解决方案,允许你使用没有循环引用的运行时配置.我们将通过注册表执行此操作.
创建一个包含IConfigureUnity的基础结构项目.
public interface IConfigureUnity
{
public void Configure(UnityContainer container);
}
Run Code Online (Sandbox Code Playgroud)
每个类库项目都将负责实现此接口以注册它自己的类.
public class RegistryForSomeClassLibrary : IConfigureUnity
{
public void Configure(UnityContainer container)
{
container
.RegisterType<IObjectContext, ObjectContextAdapter>()
.RegisterType<IConnectionStringProvider, ConnectionStringProvider>()
.RegisterType(typeof(IRepository<>), typeof(Repository<>));
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的WPF项目中,您需要创建容器并应用这些注册表.
var container = new UnityContainer();
new RegistryForSomeClassLibrary().Configure(container);
new RegistryForAnotherClassLibrary().Configure(container);
Run Code Online (Sandbox Code Playgroud)
现在你有一个完全配置的容器实例,没有任何配置文件.