配置Unity以使用Web API

时间:2017-05-01 13:57:24

标签: c# unity-container

Unity配置新手,我正在尝试在我的项目中实现这一点。但是,我被卡住了。

我收到以下错误:当前类型System.Web.Mvc.IControllerFactory是一个接口,无法构造。你错过了类型映射吗?

ContainerClass

public class ContainerBootstrapper
    {
        public static void ConfigureUnityContainer()
        {
            //simple registeration
            container.RegisterType<IProduct, ProductHelper>(); //maps interface to a concrete type

            System.Web.Mvc.DependencyResolver.SetResolver(new MyProjectControllerDependency(container));

        }

    }

DependencyResolver

public class MyProjectControllerDependency : IDependencyResolver
{
private IUnityContainer _container;

public MyProjectControllerDependency(IUnityContainer container)
{
    this._container = container;
}

public object GetService(Type serviceType)
{
    return _container.Resolve(serviceType);
}

public IEnumerable<object> GetServices(Type serviceType)
{
    return _container.ResolveAll(serviceType);
}

控制器:

public class ProductController : ApiController
{
    private readonly IProduct _iproduct;

    public ProductController(IProduct product)
    {
        this._iproduct = product;
    }
 //controller methods
}

接口

public interface IProduct
{
    List<ProductViewModel> GetProductByBarcode(string value);
    string GetProductPrice(string value);
}

辅助

public class ProductHelper : IProduct
    {
        //private readonly IProduct _iproduct;

        //public ProductHelper(IProduct iproduct)
        //{
        //    this._iproduct = iproduct;
        //}

        public List<ProductViewModel> GetProductByBarcode(string value)
        {
            throw new NotImplementedException();
        }

        public string GetProductPrice(string value)
        {
            throw new NotImplementedException();
        }
}

我不明白,我错过了什么?任何人都可以指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

对于仅使用Unity的ASP.NET MVC和WebApi项目是不够的。对于这些项目,您还需要从nuget安装Unity.MVC

这是开箱即用的即用型课程。您只需要在UnityContainer中注册依赖项并完成。

安装Unity.MVC后,它会创建课程UnityMvcActivatorUnityConfigUnityConfig类具有初始化UnityContainer的实现。您只需在RegisterTypes方法中注册依赖项即可。

public static void RegisterTypes(IUnityContainer container)
{
    container.RegisterType<IBaseClass, BaseClass>(); // Registering types
    container.LoadConfiguration();
}

除非您有完全不同的要求,否则您不需要创建任何自定义类型或实施。

这可以帮助您解决问题。