Tag: unity container

dependency injection与程序集依赖关系

说,我有以下项目结构: Application BusinessLogic DataAccessLayer 我已准备好使用穷人dependency injection的所有类型,现在我想用Unity引入真实的类型。 但是我在努力放置依赖容器及其配置的位置(我想我会从代码中配置它)。 DataAccessLayer需要注册Context(EF) BusinessLogic需要注册数据存储库(使用上下文) 应用程序需要注册服务(使用存储库) 目前,使用容器实际实例化类的唯一程序集将是Application。 所以我有以下依赖关系图: DI使用DataAccessLayer DI使用BusinessLogic DI使用Application 应用程序使用DI 我在这里有循环引用,所以将DI放在Application中似乎是合法的。 但是我必须引用DataAccessLayer ,这是我不想创建的依赖项。 我该如何解决这个问题?

无法使用Unity引导程序为ASP.NET Web API nuget包注入System.Web.Http.Filters.ActionFilterAttribute

我无法使用Unity Web API API nuget包的Unity引导程序使用自定义ActionFilterAttribute类进行dependency injection。 我在UnityConfig中注册了这个类型,我在其他地方使用它(虽然使用构造函数注入)但它工作正常。 public static void RegisterTypes(IUnityContainer container) { container.RegisterType(); … } 代码被成功调用,但实例化对象(settingService)为null。 public class APIKeyValidationAttribute : ActionFilterAttribute { [Dependency] public ISettingService settingService { get; set; } public override void OnActionExecuting(HttpActionContext actionContext) { … if (settingService == null) { throw new Exception(“settingService is null”); } … } 为了让这个工作,我需要做什么? 我已经搜索了很长时间,只能找到MVC或具有不同dependency injection器的Web API的示例。

ASP.Net MVC 4 Web API控制器不能与Unity.WebApi一起使用

我的ASP.Net MVC 4 Web API控制器不适用于Unity.WebApi。 在同一个项目中,简单的控制器可以正常使用Unity.Mvc3。 但是,当我运行从ApiController派生的Web API控制器时,我收到一条消息: {“$ id”:“1”,“Message”:“发生错误。”,“ExceptionMessage”:“类型’ElectricTests.Controllers.Api.DocumentsController’没有默认构造函数”,“ExceptionType”:“ System.Web.Http.Internal.TypeActivator.Create [TBase](Type instanceType)\ r \“System.Linq.Expressions.Expression.New(Type type)\ r \ n中的System.ArgumentException”,“StackTrace”:“ n在System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage请求,类型controllerType,Func`1和激活器)\ r \ n在System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage请求,HttpControllerDescriptor controllerDescriptor,类型controllerType) )“} 我的ApiController: public class DocumentsController : ApiController { private readonly IDocumentsRepository _repository; public DocumentsController(IDocumentsRepository repository) { _repository = repository; } public IEnumerable GetFormattedDocuments() { return _repository.GetAllFormattedDocuments(); } … Bootstrapper.cs: public static […]

如何将一个单例注册到统一的不同接口,XML配置?

这里解释了如何在代码中执行此操作: Unity将两个接口注册为一个单例 _container.RegisterType(new ContainerControlledLifetimeManager()); _container.RegisterType(); _container.RegisterType(); bool singleton = ReferenceEquals(_container.Resolve(), _container.Resolve()); 如何在XML配置中执行此操作?

使用Unity使用额外参数创建对象

我正在使用Prism,它也是很好的Unity IoC容器。 我是这个概念的新手,所以我还没有完全掌握它。 我现在要做的是使用IoC容器创建一个对象,但也传递一个额外的参数。 请允许我用一个例子解释..: 我有一个接受命令对象的类。 这是在IoC容器中注册的,因此它可以很好地处理它: public class Person { public Person(IApplicationCommands commands) { .. } .. } Person person = _container.Resolve(); 现在 – 我想传递另一个论点 – 例如这个人的名字。 但是,我仍然希望使用IoC容器来处理解析,从而从IoC容器中获取其他参数。 但是将名称作为“自定义”参数传递。 可以这样做吗? public class Person { public Person(IApplicationCommands commands, string name) { .. } .. } string name = “John”; Person person = _container.Resolve(name); // ….?? […]

Unity – 使用其他参数构造函数注入

我有一个类,其构造函数如下所示: public BatchService(IRepository repository, ILogger logger, string user) 在我的DI bootstrapper类中,我有以下RegisterType命令: .RegisterType( new InjectionConstructor( new ResolvedParameter(“SomeRepository”), new ResolvedParameter(“DatabaseLogger”))) 在我的客户端代码中,我想实例化BatchService,如下所示: BatchService batchService = DIContainer.Resolve() 如您所见,我有一个名为“user”的字符串参数作为BatchService的构造函数的一部分,该参数不是DI逻辑的一部分。 如果我需要在BatchService类中使用“user”,我该如何才能最好地处理这种情况? 预先感谢您提供的任何帮助!

在Unity中注册类型时,如何传递构造函数参数?

我在Unity中注册了以下类型: container.RegisterType<IAzureTable, AzureTable>(); AzureTable的定义和构造函数如下: public class AzureTable : AzureTableBase, IInitializer where T : TableServiceEntity { public AzureTable() : this(CloudConfiguration.GetStorageAccount()) { } public AzureTable(CloudStorageAccount account) : this(account, null) { } public AzureTable(CloudStorageAccount account, string tableName) : base(account, tableName) { } 我可以在RegisterType行中指定构造函数参数吗? 我需要能够传递tableName作为示例。 这是我上一个问题的后续行动。 那个问题我想回答但是我并没有真正明白如何获取构造函数参数。

Resolve ()是否按会话返回对象?

在Microsoft Unity IoC中,如果我调用Resolve() ,我可以保证返回的对象是在当前会话期间创建的对象吗? 例如,三个用户登录,并且假设在容器中创建的SomeType对象对每个用户具有不同的值。 对Resolve的调用是否会返回为当前用户创建的对象? 或者它会做一些愚蠢的事情,比如返回创建的最后一个? 由于一些环境问题,我自己也遇到了麻烦,我需要尽快检查一下,所以如果有人能回答这个问题,那将非常有帮助! 编辑 原谅我,我是Unity的新手,但根据我在这里阅读的内容 ,似乎我应该能够在容器中注册具有唯一名称的对象,并通过该名称检索它们。 那么,我不能使用会话ID或会话中持续存在的其他值来检索我的对象吗?

Unity – 如何将多个映射用于相同类型并注入对象

我正在使用Unity 2.0,在下面的代码中我试图在Worker对象中注入一个特定的工具。 我想使用以下代码。 但是当然有一个错误“依赖的解决方案失败了”。 我相信我应该可以做这样的事情,但我很难搞清楚。 IUnityContainer container = new UnityContainer(); container.RegisterType(“Worker”) .RegisterType(“ToolA”) .RegisterType(“ToolB”) .RegisterType(“ToolC”); IWorker worker = container.Resolve(“ToolA”); 我知道这不起作用,但我该如何解决这个问题呢? BarDev

在Unity中使用抽象工厂作为注入?

我在一些控制器实例中注册了一个抽象工厂注入。 我可以注册那个抽象工厂并将其用作注塑工厂吗? 这就是我所拥有的: public interface ILevelFactory { Levels Create(); } .RegisterType() .RegisterType(new InjectionFactory((c) => StaticLevelFactory.GetLevels())) 期望的情况: .RegisterType() .RegisterType(*** look up and use ILevelFactory ***) 简而言之,我想摆脱StaticLevelFactory。