Ali*_*aig 8 c# dependency-injection unit-of-work autofac asp.net-web-api2
我正在使用依赖注入编写web api,在存储库的帮助下工作单元和Autofac作为容器.依赖性在24小时前被完美注入,但突然间,当我今天开始工作时,我一直收到错误
"消息":"发生错误.","ExceptionMessage":"尝试创建'SearchController'类型的控制器时发生错误.确保控制器具有无参数的公共构造函数.","ExceptionType":" System.InvalidOperationException"
我将包括我的签名以及我如何注册类型,如果有人可以指出我的代码可能出错,我将非常高兴.
在我的网络api控制器上,我有
private IUnitOfWork<Listing> _unitOfWork = null;
public SearchController(IUnitOfWork<Listing> unitOfWork)
{
_unitOfWork = unitOfWork;
}
Run Code Online (Sandbox Code Playgroud)
工作单元采用泛型类型参数来创建存储库.
在我的WebApiConfig.cs中,我正在注册以下类型
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
builder.RegisterGeneric(typeof(UnitOfWork<>)).As(typeof(IUnitOfWork<>)).InstancePerDependency();
builder.RegisterType(typeof(SearchController)).UsingConstructor(typeof(IUnitOfWork<Listing>));
Run Code Online (Sandbox Code Playgroud)
我正在注册SearchController以使用接受IUnitOfWork <>的构造函数.在我添加Mocked单元测试之前一切正常,但出于某种目的,我现在继续得到这个错误.我还注册了DependencyResolver
var container = builder.Build();
var resolver = new AutofacWebApiDependencyResolver(container);
config.DependencyResolver = resolver;
Run Code Online (Sandbox Code Playgroud)
由于在这个问题上有很多赞成而没有任何答案,我不完全记得我是如何工作的,但我想分享在许多项目中一直运作良好的最新技术.
1)这是我注册我的通用repsoitory和工作单元的方式
builder.RegisterType(typeof(YourContextInRepository));
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
builder.RegisterGeneric(typeof(UnitOfWork<>)).As(typeof(IUnitOfWork<>));
Run Code Online (Sandbox Code Playgroud)
2)这是我为WebAPI设置依赖项解析器的方法
// Set the dependency resolver for Web API.
var webApiResolver = new AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = webApiResolver;
Run Code Online (Sandbox Code Playgroud)
3)将其注册为MVC控制器,
// Set MVC DI resolver to use our Autofac container
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
Run Code Online (Sandbox Code Playgroud)
这种方法适用于MVC以及WebAPI控制器,我可以这样做
private IUnitOfWork<Listing> _uow;
public SearchController(IUnitOfWork<Listing> uow)
{
_uow = uow;
}
Run Code Online (Sandbox Code Playgroud)
希望它能帮助将来的某个人.
| 归档时间: |
|
| 查看次数: |
6042 次 |
| 最近记录: |