Tag: unity container

IoC在类库中。 在哪里引导

我正在使用可以被其他组件重用的类库。 在这个类库中,我使用unity来进行dependency injection。 对于这个类库,我创建了一个测试项目。 调用者也获得了一个测试项目。 我不确定的一件事是绑定的位置。 我应该将其合并到类库中,还是应该从调用应用程序中执行此操作?

IOC容器的最佳实践

我正在使用Unity IOC容器,我只是想知道访问多个类的容器的最佳方法是什么。 是否每个类都有一个IUnityContainer成员,然后通过构造函数传递容器? 是否应该有一个带有IOC容器的单例类? asp.net开发怎么样? 有人可以指导我朝正确的方向发展吗? 谢谢。

在Unity中有TryResolve吗?

如果Resolve失败,如何让Unity不要抛出ResolutionFailedException ? 有没有类似TryResolve东西? var container = new UnityContainer(); var foo = container.TryResolve(); Assert.IsNull(foo);

如何使用unity + UnityAutoRegistration打开通用装饰器链接

在阅读了关于命令处理程序装饰的这篇文章之后,今天在一个有趣的切线上走了。 我想看看我是否可以使用Unity而不是SimpleInjector来实现模式,到目前为止它certificate是非常困难的。 我要做的第一件事是安装UnityAutoRegistration来解析开放的通用ICommandHandler接口。 该方面的当前解决方案如下: Container = new UnityContainer().LoadConfiguration(); Container.ConfigureAutoRegistration() .ExcludeSystemAssemblies() .Include(type => type.ImplementsOpenGeneric(typeof(ICommandHandler)), (t, c) => c.RegisterType(typeof(ICommandHandler), t) ) .ApplyAutoRegistration() ; 这适用于第一部分,解决任何单个 ICommandHandler 。 到目前为止,令人沮丧的是实施装饰处理程序。 一旦我添加第二个ICommandHandler作为装饰器,Unity就会抛出StackOverflowException。 我不太了解Unity内部,但我猜这是因为它无法确定要解析的实例 – 命令处理程序或命令处理程序装饰器 – 因为它们都实现了ICommandHandler接口。 谷歌搜索引导我首先阅读这篇文章 ,它解释了如何在我认为的蛮力方法中做到这一点。 我也找到了这些 相关的 页面,但没有一个是我问题的完整解决方案(我太无知了,不能自己解决)。 然后我找到了这篇文章,这似乎解决了我同样的担忧 。 然而,强大的解决方案并不能解决开放式generics问题。 目前,我们的大多数依赖项都是从.config文件中的unity部分加载的,所以我不想为每个处理程序或装饰器编写大量的编译代码。 似乎有某种UnityContainerExtension和DecoratorBuildStrategy是正确的方法,但我无法弄明白。 我现在已经玩了一段时间的powershell代码了,而且完全卡住了。 我尝试修改他的代码以考虑generics导致BadImageFormatExceptions(尝试加载具有不正确格式的程序。(HRESULT的exception:0x8007000B))。 我喜欢这样做以实现装饰器链接的想法,因为它很短,每个关注点只有1行: var container = new Container(); // Go look in all assemblies […]

使用ASP.NET Session进行终身管理(Unity)

我正在考虑使用Unity来管理自定义用户类实例的生命周期。 我计划使用自定义ASP.NET会话管理器扩展LifetimeManager。 我希望能够做的是从我的自定义类存储和检索当前登录的用户对象,并让Unity从ASP.NET中的会话对象获取User的实例,或者(在Win32项目中时)检索它静态地或从当前线程。 到目前为止,我最好的解决方案是在启动时创建Unity容器的静态实例,并使用Resolve方法从我的每个类中获取我的User对象。 但是,这似乎在我的其他类中创建了对unity容器的依赖。 实现这一目标的“团结”方式是什么? 我希望能够从任何类中读取/替换当前的User实例。

用Unity填充集合的方法

我有两个示例类 class ClassToResolve { private List _coll; public ClassToResolve(List coll) { _coll = coll; } } class CollectionItem { //… } 我需要解决ClassToResolve var classToResolve = new ClassToResolve( new List() { new CollectionItem(), new CollectionItem(), new CollectionItem() } ); 现在我以某种方式解决它 var classToResolve = new ClassToResolve( new List() { unity.Resolve(), unity.Resolve(), unity.Resolve() } ); 有没有办法使用动态注册解决Unity的ClassToResolve?

Unity注册一个接口多个对象并告诉Unity在哪里注入它们

嗨我一直在努力告诉Unity,如果它有多个实现,我希望它将它们注入到不同的类中。这就是我的意思: 假设我有一个接口IProductCatalogService和两个实现ProductCatalog : IProductCatalogService和ProductCatalogService : IProductCatalogService 。 我如何告诉Unity,对于类AI,我希望在我的构造函数中传递类型为ProductCatalog的实例,对于类B我想要一个ProductCatalogService实例。 我在ASP.NET Web API项目中使用Unity,并在GLobalConfiguration设置了解析器。 对于简单的1对1注册,一切正常。 这是我尝试过但它似乎不起作用: public class DependencyServiceModel { public Type From { get; set; } public Type To { get; set; } public IEnumerable ForClasses { get; set; } } public void RegisterTypeForSpecificClasses(DependencyServiceModel dependencyService) { foreach (var forClass in dependencyService.ForClasses) { string uniquename = Guid.NewGuid().ToString(); Container.RegisterType(dependencyService.From, […]

如何将连接字符串注入IDbContextFactory 的实例?

我正在使用Entity Framework 5和Code First Migrations。 我有一个从DbContext派生的DataStore类: public class DataStore : DbContext, IDataStore { public int UserID { get; private set; } public DataStore(int userId, string connectionString) : base(connectionString) { UserID = userId; } public virtual IDbSet Users { get; set; } // Rest of code here } 还有一个工厂类,它创建DataStore类的DataStore : public class DataStoreFactory : Disposable, IDataStoreFactory […]

如何使用Unity 2.0注入Log4Net ILog实现

最终这与设置log4Net有关,但一般来说问题不是特定于日志记录。 一般来说,我想弄清楚的是,在Microsoft Unity 2.0中,如何做到与Castle.Facilities.Logging.LoggingFacility相同的东西。 即能够声明对记录器的依赖性,并使用注入它的对象的类型初始化记录器。 本着考验的精神值得千言万语,这就是我所需要的: class Logger_IOC_Tests { //[Test] public void Logger_should_be_initialized_with_the_type_of_the_object_that_is_using_it() { var container = new UnityContainer(); /* Configuration Magic probably involiving registering either * a custom IDependencyResolverPolicy or BuilderStrategy * goes here… */ container.RegisterType(new ContainerControlledLifetimeManager()); var user = container.Resolve(); Assert.True(user.Logger.GetUserType() == user.GetType()); } } interface ILogger { Type GetUserType(); } class Logger […]

如何正确使用Unity将ConnectionString传递给我的存储库类?

我刚刚开始使用微软的Unity应用程序块dependency injection库,而且我已经解开了。 这是我的IoC类,它将处理我的具体类到它们的接口类型的实例化(所以每次我想在我的控制器中存储库时,我不必在IoC容器上保持调用Resolve): public class IoC { public static void Intialise(UnityConfigurationSection section, string connectionString) { _connectionString = connectionString; _container = new UnityContainer(); section.Configure(_container); } private static IUnityContainer _container; private static string _connectionString; public static IMovementRepository MovementRepository { get { return _container.Resolve(); } } } 所以,我的想法是,从我的控制器,我可以做到以下几点: _repository = IoC.MovementRepository; 我目前收到错误: exception是:InvalidOperationException – 无法构造String类型。 您必须配置容器以提供此值。 现在,我假设这是因为我的映射具体实现需要为其构造函数提供单个字符串参数。 具体课程如下: […]