2017-02-01 71 views
1

我有一個通用的存儲庫接口,團結通用接口和具體類

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)「}}}

+0

[確保控制器有無參數公共構造函數錯誤](http:// stackoverflow。com/questions/24254189/make-sure-that-the-controller-has-a-parameterless-public-constructor-error) – NightOwl888

+0

我也這麼認爲,但那篇文章提到了container.Register方法,它不存在適用於UnityContainer類型 – JerseyDuke

回答

0

在NightOwl888中複製的帖子略有不同,但它顯示了正在執行的操作的正確實現。在RepositoryBase類中需要一個構造函數(public RepositoryBase(){})

這基本上確保您的健康act類有一個默認的實現。