我有一個通用的存儲庫接口,團結通用接口和具體類
IRepositroy<T>
一個抽象基類:
public abstract class RepositoryBase
{
protected readonly IDbContextFactory _dbContextFactory;
protected readonly IUnitOfWork _unitOfWork;
protected RepositoryBase(IDbContextFactory dbContextFactory, IUnitOfWork uow)
{
this._dbContextFactory = dbContextFactory;
_unitOfWork = uow;
}
}
我再有實施這些接口
public class CarRepo : RepositoryBase, IRepository<Car> ...
混凝土倉庫類
我正在嘗試將這些注入到我的WebApi控制器中,但是不成功湖
我得到一個錯誤,說我沒有無參數的ctor,並且它無法投射CarRepo來鍵入IRepository。
在我的容器的配置,我有:
container.RegisterType(typeof(IRepository<>), typeof(CarRepo));
下面是我得到搭售導航到該控制器的方法時:
{「消息」:「出現錯誤」, 「ExceptionMessage」:「嘗試創建類型爲'CarController'的控制器時發生錯誤,確保控制器具有無參數公共構造函數。」,「ExceptionType」:「System.InvalidOperationException」,「StackTrace」:「at System .Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage請求,HttpControllerDescriptor controllerDescriptor,Type controllerType)在System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage請求)\ r \ n在System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()「,」InnerException「:{」Message「 :「發生錯誤」,「ExceptionMessage」:「依賴項的解析失敗,類型= \」CarController \「,名稱= \」(無)\「。\ r \ n異常發生時:解析參數\」存儲庫\「構造函數CareController(IRepository 1[[CarRepository, DAL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] repository).\r\nException is: InvalidCastException - Unable to cast object of type 'CarRepository' to type 'IRepository
1 [Repository]'。\ r \ n -------------------------------- --------------- \ r \ n在出現異常時,容器是:\ r \ n \ r \ n解決CarController(無)\ r \ n解決參數\構造函數CarController(IRepository 1[[CarRepository, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] repository)\r\n","ExceptionType":"Microsoft.Practices.Unity.ResolutionFailedException","StackTrace":" at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable
1 resolverOverrides)\ r \ n在Microsoft.Practices.Unity.UnityContainer.Resolve(Type t,String name,ResolverOverride [] resolverOverrides)\ r \ n在Microsoft.Practices.Unity的「repository \」中。 UnityContainerExtensions.Resolve(IUnityContainer容器,類型t,ResolverOverride [] ove rrides)\ r \ n在Unity.WebApi.UnityDependencyScope.GetService(類型serviceType)\ r \ n在System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage請求,類型controllerType,Func 1& activator)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)","InnerException":{"Message":"An error has occurred.","ExceptionMessage":"Unable to cast object of type 'CarRepository' to type 'IRepository
1 [CarRepository]'。「 ,「ExceptionType」:「System.InvalidCastException」,「StackTrace」:「在Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext的lambda_method(Closure,IBuilderContext)\ r \ n。 <> Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext上下文)\ r \ n在Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext上下文)\ r \ n上的c__DisplayClass1.b__0(IBuilderContext上下文)\ r \ n Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext上下文)\ r \ n at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t,Object existing,String name,IEnumerable`1 resolverOverrides)「}}}
[確保控制器有無參數公共構造函數錯誤](http:// stackoverflow。com/questions/24254189/make-sure-that-the-controller-has-a-parameterless-public-constructor-error) – NightOwl888
我也這麼認爲,但那篇文章提到了container.Register方法,它不存在適用於UnityContainer類型 – JerseyDuke