Tag: unity container

IUnityContainer.Resolve <T>抛出声明它不能用于types参数的错误

昨天我已经实现了代码: CustomerProductManager productsManager = container.Resolve<CustomerProductManager>(); 这是可编译和工作。 今天(可能我已经修改了一些东西)我不断得到错误: 非generics方法'Microsoft.Practices.Unity.IUnityContainer.Resolve(System.Type,string,params Microsoft.Practices.Unity.ResolverOverride [])'不能与types参数一起使用 我的同事有相同的源代码,并没有相同的错误。 为什么? 如何解决这个问题? PS 行“使用Microsoft.Practices.Unity;” 存在于使用部分中。 我试图用非通用版本replace通用版本: CustomerProductManager productsManager = (CustomerProductManager)container.Resolve(typeof(CustomerProductManager)); 并得到另一个错误: 方法'Resolve'没有重载需要'1'参数 看起来像其中一个组件没有引用..但是哪一个? 我有其中2引用:1. Microsoft.Practices.Unity.dll 2. Microsoft.Practices.ServiceLocation.dll PPS我看到类似的问题http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205,但它被parsing为“不是一个错误” 任何想法都会有所帮助

可以使Unity一直不抛出SynchronizationLockException吗?

Unitydependency injection容器似乎是一个众所周知的问题,其中SynchronizedLifetimeManager通常会导致Monitor.Exit方法抛出一个SynchronizationLockException,然后被捕获并被忽略。 这对我来说是一个问题,因为我喜欢使用Visual Studio进行debugging,以打破任何抛出的exception,所以每当我的应用程序启动时,我都无故打断这个exception多次。 我怎样才能防止这个exception被抛出? 无论在networking上的其他地方提到这个问题,build议通常包括更改debugging器设置以忽略它。 这类似于去看医生,说:“医生,医生,当我举起arm时,我的arm会疼。”被告知:“好吧,停止抬高它。 我正在寻找一个解决scheme,停止exception被抛出首先。 在SetValue方法中发生exception,因为它假定GetValue将被首先调用,其中Monitor.Enter被调用。 但是,LifetimeStrategy和UnityDefaultBehaviorExtension类都定期调用SetValue而不调用GetValue。 我宁愿不必更改源代码并维护我自己的Unity版本,所以我希望有一个解决scheme,我可以在容器中添加一些扩展,策略或策略的组合,以确保终身pipe理器是一个SynchronizedLifetimeManager,GetValue总是在别的之前被调用。

使用Unity无法注入依赖到ASP.NET Web API控制器

有没有人有任何成功运行使用IoC容器注入到ASP.NET WebAPI控制器的依赖? 我似乎无法得到它的工作。 这就是我现在正在做的。 在我的global.ascx.cs : public static void RegisterRoutes(RouteCollection routes) { // code intentionally omitted } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); IUnityContainer container = BuildUnityContainer(); System.Web.Http.GlobalConfiguration.Configuration.ServiceResolver.SetResolver( t => { try { return container.Resolve(t); } catch (ResolutionFailedException) { return null; } }, t => { try { return container.ResolveAll(t); } catch (ResolutionFailedException) { […]

确保控制器有一个无参数的公共构造函数错误

我已经按照这个教程已经很好,直到我修改我的DbContext有一个额外的构造函数。 我现在有问题的决议,不知道该怎么做来解决这个问题。 有没有一种简单的方法来强制它抢无参数的构造函数或我正在接近这个错误? 带有两个构造函数的DbContext : public class DashboardDbContext : DbContext { public DashboardDbContext() : base("DefaultConnection") { } public DashboardDbContext(DbConnection dbConnection, bool owns) : base(dbConnection, owns) { } } SiteController构造函数: private readonly IDashboardRepository _repo; public SiteController(IDashboardRepository repo) { _repo = repo; } 库: DashboardDbContext _context; public DashboardRepository(DashboardDbContext context) { _context = context; } UnityResolver代码: public class […]

我可以传递构造参数到Unity的Resolve()方法吗?

我正在使用微软的Unity进行dependency injection,我想要做这样的事情: IDataContext context = _unityContainer.Resolve<IDataContext>(); var repositoryA = _unityContainer.Resolve<IRepositoryA>(context); //Same instance of context var repositoryB = _unityContainer.Resolve<IRepositoryB>(context); //Same instance of context IDataContext context2 = _unityContainer.Resolve<IDataContext>(); //New instance var repositoryA2 = _unityContainer.Resolve<IRepositoryA>(context2); RepositoryA和RepositoryB都有一个构造函数,它需要一个IDataContext参数,我希望Unity使用我传递的上下文初始化存储库。 另外请注意, IDataContext没有注册Unity(我不想要3个IDataContext实例)。