使用 UnityDependencyResolver 解析 Unity 容器
Unity Container resolving with UnityDependencyResolver
我在 Microsoft Unity 中使用依赖注入。但是当我必须 Resolve
实例时遇到问题。
我的场景:我有一个 WPF 应用程序和一个 class 库。 Unity 安装在 class 库中。
我正在尝试使用依赖注入创建一个对象。
我收到以下错误:
The type 'Microsoft.Practices.Unity.IUnityContainer' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.Practices.Unity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f'.
代码:
UnityDependencyResolver ObjUnityDependencyResolver = new UnityDependencyResolver(UnityContainerConfig.Initialize());
var myclass = ObjUnityDependencyResolver.GetService(typeof(IMyClass));
myclass.HelloWorld(); //Console.Write("Hello World");
这是我的统一容器:
public static class UnityContainerConfig
{
private static IUnityContainer _unityContainer = null;
public static IUnityContainer Initialize()
{
if (_unityContainer == null)
{
_unityContainer = new Microsoft.Practices.Unity.UnityContainer()
.RegisterType<IMyClass, MyClass>();
}
return _unityContainer;
}
}
这是我的统一解析器:
public class UnityDependencyResolver : IDependencyResolver
{
private IUnityContainer _unityContainer = null;
public UnityDependencyResolver(IUnityContainer unityContainer)
{
this._unityContainer = unityContainer;
}
public object GetService(Type serviceType)
{
try
{
return _unityContainer.Resolve(serviceType);
}
catch
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return _unityContainer.ResolveAll(serviceType);
}
catch
{
return new List<object>();
}
}
}
我必须在我的解决方案中的每个项目中安装 Unity?
什么是"better way to create an instance"和统一使用依赖注入?
你只需要在客户端项目中安装Unity,不要使用_unityContainer.Resolve(serviceType),如果你仔细配置你的项目,Unity会负责解析每一个服务,
我在 Microsoft Unity 中使用依赖注入。但是当我必须 Resolve
实例时遇到问题。
我的场景:我有一个 WPF 应用程序和一个 class 库。 Unity 安装在 class 库中。
我正在尝试使用依赖注入创建一个对象。
我收到以下错误:
The type 'Microsoft.Practices.Unity.IUnityContainer' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.Practices.Unity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f'.
代码:
UnityDependencyResolver ObjUnityDependencyResolver = new UnityDependencyResolver(UnityContainerConfig.Initialize());
var myclass = ObjUnityDependencyResolver.GetService(typeof(IMyClass));
myclass.HelloWorld(); //Console.Write("Hello World");
这是我的统一容器:
public static class UnityContainerConfig
{
private static IUnityContainer _unityContainer = null;
public static IUnityContainer Initialize()
{
if (_unityContainer == null)
{
_unityContainer = new Microsoft.Practices.Unity.UnityContainer()
.RegisterType<IMyClass, MyClass>();
}
return _unityContainer;
}
}
这是我的统一解析器:
public class UnityDependencyResolver : IDependencyResolver
{
private IUnityContainer _unityContainer = null;
public UnityDependencyResolver(IUnityContainer unityContainer)
{
this._unityContainer = unityContainer;
}
public object GetService(Type serviceType)
{
try
{
return _unityContainer.Resolve(serviceType);
}
catch
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return _unityContainer.ResolveAll(serviceType);
}
catch
{
return new List<object>();
}
}
}
我必须在我的解决方案中的每个项目中安装 Unity?
什么是"better way to create an instance"和统一使用依赖注入?
你只需要在客户端项目中安装Unity,不要使用_unityContainer.Resolve(serviceType),如果你仔细配置你的项目,Unity会负责解析每一个服务,