Unity容器用UnityDependencyResolver进行解析

本文关键字:UnityDependencyResolver Unity | 更新日期: 2023-09-27 18:03:33

我使用Microsoft Unity的依赖注入。但是当我必须Resolve实例时,我遇到了问题。

我的场景:我有一个WPF应用程序和一个类库。Unity安装在类库中。

我正在尝试使用依赖注入创建一个对象。

我得到了以下错误:

类型为"Microsoft.Practices.Unity。"IUnityContainer'在未被引用的程序集中定义。您必须添加对程序集"Microsoft.Practices"的引用。Unity,版本=4.0.0.0,文化=中性,PublicKeyToken=6d32ff45e0ccc69f'.

代码:

UnityDependencyResolver ObjUnityDependencyResolver = new UnityDependencyResolver(UnityContainerConfig.Initialize());
var myclass = ObjUnityDependencyResolver.GetService(typeof(IMyClass));
myclass.HelloWorld(); //Console.Write("Hello World");

这是我的unity容器:

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 ?

"创建实例的更好方法"是什么?

Unity容器用UnityDependencyResolver进行解析

你只需要在客户端项目中安装Unity,并且不要使用_unityContainer.Resolve(serviceType),如果你仔细配置你的项目,Unity将负责解析每个服务,

相关文章:
  • 没有找到相关文章