Tag: unity container

使用unity解析具有多个构造函数的实例

我想使用unity创建一个类的实例,其中类有两个具有相同参数数量的构造函数。 这是实例化: _unityContainer.Resolve(new ParameterOverride(“gradeTypeStringFromXmlFile”, gradeTypeStringFromXmlFile)); 以下是构造函数: public GradeType(string gradeTypeStringFromXmlFile) { _gradeTypeStringFromXmlFile = gradeTypeStringFromXmlFile; } public GradeType(Enum.GradeType gradeType) { _gradeType = gradeType; } 如果我尝试这样做,我得到一个例外,说明类型GradeType有多个长度为1的构造函数。无法消除歧义 。 我可以在一个构造函数上设置属性[InjectionConstructor]以使其与一个一起工作,但是我不能使用另一个构造函数创建一个具有unity的实例。 是否有一些方法让多个构造函数具有相同数量的参数并仍然使用unity来创建实例?

UnityContainer.Resolve或ServiceLocator.GetInstance?

这似乎是一个愚蠢的问题,因为在我的代码中一切正常,但我用我的Unity容器_ambientContainer以这种方式注册了单例: _ambientContainer.RegisterType(new ContainerControlledLifetimeManager()); 为了避免使用我的本地字段,我使用: get { return ServiceLocator.Current.GetInstance(); } 在我的get属性中获取我的对象的实例。 这样我总是得到相同的实例( Application.StateContext仍然是单例)或者GetInstance创建了一个新实例? 是否更好地使用本地_ambientContainer字段? get { return _ambientContainer.Resolve(); } 谢谢。

如何在Bootstrapper文件中注册具有多个存储库类型的服务类?

我的一个服务层(ProductService)有4个参数化构造函数。 并且所有4个构造函数都注入了不同的存储库类型。 public class ProductService : IProductService { private IUserDal mUserDal { get; set; } private IItemDal mItemDal { get; set; } private IRoleDal mRoleDal { get; set; } private IBranchDal mBranchDal { get; set; } public ProductService (IUserDal userDal) { mUserDal = userDal; } public ProductService (IItemDal itemDal) { mItemDal = itemDal; } public […]

用统一的其他构造函数解析参数

我正在使用Unity并注入所有依赖项。 假设我有一个像这样的Manager类 public class Manager : IManager { public Manager(IRepository repository, string customerName) { } } 和一个存储库类,如: public class Repository : IRepository { public Repository(string customerName) { } } 我正在使用WCF,并将根据请求解析管理器和存储库。 我在服务启动时注册了所有类型,但在启动时我不知道“customerName”参数。 这将作为参数传递给WCF服务。 哪个会像这样解决经理: public class Service { private IUnityContainer _container; public Service(IUnityContainer container) { _container = container; } public void ServiceCall(string customerName) { var manager […]

如何使用Unity的xml配置创建和填充Dictionary ?

如何使用Unity的xml配置创建和填充Dictionary? 我需要创建一个Dictionary并使用unity中的依赖引用填充对象。 我怎么能做到这一点?

每个类库的dependency injection容器

所以,这是我第一次处理DI,如果我误解了整个DI,请纠正我。 这些是我的一些项目: Web应用程序/ Web API项目 – 取决于服务类+注入Automapper(仅适用于当前项目的配置) 服务(类库) – 取决于数据类+注入自动映射(配置仅适用于当前项目) 数据(类库) 我的目的是让每个项目都有自己的DI容器(Unity DI说)。 我不确定每个项目都有自己的DI容器。 我已经阅读了一些文章,表明它无法完成(不确定我是否正确解释它们)但我不确定为什么? 如果无法完成,任何人都可以解释它,我如何实现这一点,我不想在应用层DI中的数据层中注册类。 如果每个项目都有自己的DI,那么在注册IMapper作为实例时它会覆盖其他层的IMapper吗?

Unity将exception包装到ResolutionFailedException。 怎么避免?

我想知道,是否有可能要求Unity“不要在解决时包装任何用户exception”? 真的,为什么Unity会对ResolutionFailedException进行包装? 它正在改变“建筑服务合同”,恕我直言,使用统一对象初始化的事实应该是透明的,这意味着如果客户端等待来自“new”运算符的IOException的示例它应该将其解包,甚至对象也是使用Unity创建的。 其他IoC容器的行为是否相同?

Unity registerType中generics参数的多态分辨率

我正在尝试执行以下操作并失败: class base {} class derived1 : base {} class derived2 : base {} interface itr where t : class, base {} class c1: itr {} class c2 : itr {} //以下2个注册失败: _unityContainer.RegisterType<itr, c1>(“c1”); _unityContainer.RegisterType<itr, c2>(“c2”); 我得到的错误是上述注册中的第二个参数不能被类型转换为第一个参数,并且该注册无效。 有关如何做到这一点的任何建议? 我需要执行上述操作,而不是使用derived1或derived2类作为通用参数进行注册,因为在解析时我不想知道我正在解析的确切派生类型。 我只想多态地使用基类型方法。

Unity:当前类型是一个接口,无法构造

得到以下代码开始 public interface IDataContextAsync : IDataContext { Task SaveChangesAsync(CancellationToken cancellationToken); Task SaveChangesAsync(); } public partial class DB1Context : DataContext{ } public partial class DB2Context : DataContext{ } 以下是UnityConfig文件。 注意:我正在使用Nuget bootstrapper for ASP.Net MVC,下面是我的UnityConfig文件 public static void RegisterTypes(IUnityContainer container) { container .RegisterType(“DB1Context”, new PerRequestLifetimeManager()) //.RegisterType(“DB2Context”, new PerRequestLifetimeManager()) .RegisterType( new PerRequestLifetimeManager(), new InjectionConstructor(new object[] {new RepositoryFactories()}) ) […]

使用Unity解析命名依赖项

我有一个具有2个依赖项的服务:存储库和网关(短信)。 我需要解析2个不同版本的服务,这些版本仅在传递给网关的其中一个参数上有所不同。 代码简化如下 public interface IService { string DoSomething(); } public interface IServiceFoo { string DoSomething(); } public interface IServiceBar { string DoSomething(); } public interface IRepository { } public class Repository : IRepository { } public interface IGateway { string Name { get; set; } } public class Gateway : IGateway { public string […]