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();
}
}
我不明白,我错过了什么?任何人都可以指出我正确的方向。
答案 0 :(得分:1)
对于仅使用Unity的ASP.NET MVC和WebApi项目是不够的。对于这些项目,您还需要从nuget安装Unity.MVC
。
这是开箱即用的即用型课程。您只需要在UnityContainer中注册依赖项并完成。
安装Unity.MVC
后,它会创建课程UnityMvcActivator
和UnityConfig
。 UnityConfig
类具有初始化UnityContainer的实现。您只需在RegisterTypes
方法中注册依赖项即可。
public static void RegisterTypes(IUnityContainer container)
{
container.RegisterType<IBaseClass, BaseClass>(); // Registering types
container.LoadConfiguration();
}
除非您有完全不同的要求,否则您不需要创建任何自定义类型或实施。
这可以帮助您解决问题。