Tag: unity container

如何在XML配置中声明Unity InjectionFactory

我正在将Unity配置移动到web.config文件。 我坚持如何将以下代码配置迁移到xml格式: var container = new UnityContainer(); container.RegisterType(new InjectionFactory(x=> HttpContext.Current.User)); return container; 以下是XML声明:

如何为Unity中的所有已注册类型配置日志记录拦截器?

我将跟踪由Unity容器管理的服务中发生的每个操作作为文件系统中的日志。 我想我可以定义一个名为IService的接口,所有其他接口或实现都应该从他inheritance。 另一方面,我想开发一个自定义拦截行为或调用处理程序来将日志保存到文件中。 不幸的是,我发现使用此代码对我不起作用 IUnityContainer unity = new UnityContainer(); //Interception unity.AddNewExtension(); Interception interception = unity.Configure(); unity.RegisterType( new DefaultInterceptor(new InterfaceInterceptor()), new DefaultInterceptionBehavior(new LoggingBehavior())); string[] configFiles = Directory.GetFiles(“.”, “*.config”); foreach (string configFile in configFiles) { var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = configFile }; System.Configuration.Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); var unitySection = (UnityConfigurationSection) configuration.GetSection(“unity”); unity = […]

是否可以在控制器中获取当前的Unity容器

我注册了这样的统一容器: var container = new UnityContainer(); container.RegisterType(new ContainerControlledLifetimeManager()) 是否可以从控制器访问此“容器”

Unity应用程序块2.0 – 给定的程序集名称或代码库无效

接口(在名为“Interfaces”的程序集中。在项目中: – 接口) namespace Interfaces { public interface IDoSomeWork1 { string DoSomeWork1(); } } namespace Interfaces { public interface IDoSomeWork2 { string DoSomeWork2(); } } 依赖关系(在名为“实体”的程序集中。在项目中: – 实体) namespace Entities { public class ClassB : IDoSomeWork1 { public string DoSomeWork1() { return this.ToString(); } } } namespace Entities { public class ClassC : IDoSomeWork2 { […]

Unity Container多个相同接口的实现

我正在研究统一容器,并且有一个关于如何将类的构造解析为接口的多个不同实现的快速问题。 这是我的代码: public interface IRenderer { void DrawSquare(Square square); void DrawCircle(Circle circle); } public interface IShape { void Draw(IRenderer renderer); } public class Dx11Renderer : IRenderer { public void DrawSquare(Square square) { } public void DrawCircle(Circle circle) { } } public class GlRenderer : IRenderer { public void DrawSquare(Square square) { } public void DrawCircle(Circle […]

如何注册所有类型的接口并统一获取它们的实例?

Unity如何获取接口的所有实例然后访问它们? 代码片段取自此处: 失败跟踪器 在StrcutureMap中,可以从程序集中注册所有类型的接口,然后访问它们,如下所示: public class TaskRegistry : Registry { public TaskRegistry() { Scan(scan => { scan.AssembliesFromApplicationBaseDirectory( a => a.FullName.StartsWith(“FailTracker”)); scan.AddAllTypesOf(); scan.AddAllTypesOf(); scan.AddAllTypesOf(); scan.AddAllTypesOf(); scan.AddAllTypesOf(); }); } } ObjectFactory.Configure(cfg => { cfg.AddRegistry(new TaskRegistry()); }); 然后访问实现这些接口的所有类型,如: using (var container = ObjectFactory.Container.GetNestedContainer()) { foreach (var task in container.GetAllInstances()) { task.Execute(); } foreach (var task in container.GetAllInstances()) { […]

Unity的自定义对象工厂扩展

我正在使用Unity IoC容器,我需要拦截对Resolve的任何调用以获取某个基本接口,并运行我自己的自定义代码来构造这些类型。 换句话说,在下面的示例代码中,当我调用container.Resolve() ,如果它没有具体实现类型的实例,则调用MyFactoryFunction来构造一个,否则我希望它返回缓存副本。 标准Unity容器无法构造这些对象( 更新:因为它们是.NET远程处理对象,因此本地计算机上的任何程序集中都不存在具体类),我不想在前面创建它们使用RegisterInstance存储它们。 interface IFoo : IBase { … } interface IFoo2 : IBase { … } … container.Resolve(); … IBase MyFactoryFunction(Type t) { … } 我假设我可以创建一个Unity扩展来执行此操作,但我想知道是否已经有一个解决方案我可以借用。

如何更好地解决工厂创建的对象中的依赖关系?

例如,我有依赖: public interface IMyDependency { } public class MyDependency : IMyDependency { } 注入MyClass对象: public interface IMyInterface { } public class MyClass : IMyInterface { [Dependency] public IMyDependency MyDependency { get; set; } } 我还有一个Factory,它创建了MyClass实例: public interface IFactory { IMyInterface CreateMyObject(); } public class Factory : IFactory { public IMyInterface CreateMyObject() { // some checks […]

Unity.AutoRegistration ?? 基于会议的注册统一

我的代码如下 IUnityContainer container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom(typeof(Test).Assembly.Location) .LoadAssemblyFrom(typeof(ITest).Assembly.Location) .ApplyAutoRegistration(); 这是我的第一个问题。 我不确定我是否在这里正确使用了LoadAssemblyFrom方法: ITest test = container.Resolve(); 当我尝试编译时,我得到exception“ResolutionFailedException”。 我究竟做错了什么? 感谢您提前的时间。

与ASP.NET核心和MVC6(核心)的统一

更新09.08.2018 Unity正在开发中,但我没有时间来测试它如何与ASP.NET Core框架配合使用。 更新于15.03.2018 此解决方案针对在使用.NET Framework 4.5.2而不是 .NET Core Framework时使用ASP.NET Core v1和Unity的特定问题。 我不得不使用这个设置,因为我需要一些.Net 4.5.2 DLL,但对于任何重新开始的人我都不会推荐这种方法。 此外,Unity还没有进一步开发(据我所知)所以我建议将Autofac框架用于新项目。 有关如何执行此操作的详细信息,请参阅此post 。 介绍 我正在使用ASP.NET和MVC构建Web应用程序。 此应用程序依赖于某些服务(WCF服务,数据存储区服务等)。 现在为了保持良好和分离,我想使用DI(Dependecy Injection)框架,特别是Unity。 初步研究 我找到了这篇博文,但遗憾的是它没有用。 这个想法虽然很好。 它基本上表示您不应将ServiceCollection中注册的所有服务注册到您自己的容器中,而应引用默认的ServiceProvider。 所以。 如果需要解决某些问题,则调用默认的ServiceProvider,如果没有解析,则使用您的自定义UnityContainer解析该类型。 问题 MVC始终尝试使用默认的ServiceProvider解析Controller。 此外,我注意到即使控制器得到正确解析,我也永远不会“混合”依赖关系。 现在,如果我想使用我的一个服务而且还要使用ASP的IOptions接口,则该类永远无法解析,因为这两个容器中没有一个具有这两种类型的解析。 我需要的 所以回顾一下,我需要以下内容: 我不需要将ASP.NET依赖项复制到UnityContainer中的设置 一个可以解析我的MVC控制器的容器 一个可以解决“混合”依赖关系的容器 编辑: 所以问题是我如何才能实现这些要点? 环境 project.json: