var container = new Container();
container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
container.RegisterInstance<IDbConnection>(new SqlConnection(connectionString));
container.Register<IAdvertRepository, AdvertRepository>(Lifestyle.Scoped);
container.Register<IAdvertService, AdvertService>(Lifestyle.Scoped);
container.Register<ICommentService, CommentService>(Lifestyle.Scoped);
container.Register<IRoleService, RoleService>(Lifestyle.Scoped);
container.Register<IUserService, UserService>(Lifestyle.Scoped);
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
container.Verify();
GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorWebApiDependencyResolver(container);
我在Web API中使用Simple Injector并尝试使用它,但出现错误:
AdvertController已注册为瞬态,但实现了IDisposable
其他控制器具有相同的错误。
我应该如何解决?
public class AdvertController : ApiController
{
private readonly IAdvertService _advertService;
public AdvertController(IAdvertService advertService)
{
_advertService = advertService;
}
[HttpGet]
public IEnumerable<AdvertDto> GetAll()
{
return _advertService.GetAll();
}
[HttpGet]
public AdvertDto Get(long id)
{
return _advertService.Get(id);
}
[HttpDelete]
public void Delete(long id)
{
_advertService.Delete(id);
}
}
最佳答案
对于进入此页面的其他用户,在我们的案例中,SimpleInjector已自动从3.1.1更新到4.3.0,因为另一个软件包依赖于较新的版本,从而破坏了我们的MVC5应用
XXXController已注册为瞬态,但实现了IDisposable
经过一番调查后,我意识到在更新SimpleInjector时,其他相关软件包(SimpleInjector.Integration.Web,SimpleInjector.Integration.Web.Mvc等)都没有。我更新了这些内容,还不得不更改了
container.RegisterPerWebRequest<T>(...)
至
container.Register<T>(..., Lifestyle.Scoped)
之后,一切又恢复了。
附言对于注意到其他程序包不应该依赖SimpleInjector的任何人,您是完全正确的。这是一个内部生产的程序包,不小心以某种方式添加了依赖性。我们删除了它,但也认为了解最新的SI软件包是个好主意。