Tag: unity container

团结和代表

我正在使用Unitydependency injection框架。 我有两个类,每个类在构造函数中使用相同的delegate参数。 解决后,每个类应该获得不同的方法。 我可以不使用属性进行设置吗? 如果不是,你会如何使用属性?

Unity拦截GetCustomAttribute

在此先感谢您的帮助! (是的,底部有一个问题) 我正在使用Unity 3.x Interception来执行AOP之前和之后的数据库连接和事务活动。 数据库拦截器始终是实例化的,并且事务拦截器是基于CustomAttributeMatchingRule的,都是通过InterfaceInterceptor实现的。 我有在TransactionAttribute中设置的属性: [Transaction(IsolationLevel.ReadUncommitted, NoRollbackFor = new[] { typeof(TestException) })] 作为一个例子,我在我的unit testing中使用。 我想在我的TransactionCallHandler类调用方法中访问它们。 我见过这样的例子 var transactionAttribute = input.MethodBase.GetCustomAttribute(false); 是访问它的方法,但我的事务var是null。 我的结论是正在检查拦截代理类的自定义属性而不是原始的具体实例。 我的工作原理是反映一直回到类级别,深入挖掘出被拦截的正确方法,并从那里执行get自定义属性。 var methods = input .Target .GetType() .GetMethods() .Where(m => m.Name == input.MethodBase.Name) .Where(m => m.GetCustomAttribute(false) != null); (还有大约30行代码,以确保我没有访问错误的方法名称,如果方法有重载;因此性能拖延……) 所以,毕竟,我的问题是:我没有正确地执行reflection吗? 我应该报告Unity中的错误吗? 这是我的容器定义: Container = new UnityContainer(); Container.AddNewExtension(); Container.RegisterType( new InterceptionBehavior(), new […]

问题解决与Unity的依赖关系

一旦我试图解决我的unitOfWork我得到这个错误: “IUnitOfWork类型没有可访问的构造函数。” 但是,只有当我将unitOfWork的LifetimeManager设置为PerResolveLifetimeManager时才会发生这种情况。 如果我只是使用默认的,一切正常。 我的unitOfWork,有一个公共无参数构造函数。 这是我的代码: //Global asax IUnityContainer unity = new UnityContainer(); unity.RegisterType(); unity.RegisterInstance(new UnitOfWork(), new PerResolveLifetimeManager()); ControllerBuilder.Current.SetControllerFactory(new IocControllerFactory(unity)); //IocControllerFactory public class IocControllerFactory : DefaultControllerFactory { private readonly IUnityContainer _container; public IocControllerFactory(IUnityContainer container) { _container = container; } protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) { if (controllerType != null) return _container.Resolve(controllerType) as IController; […]

如何使用Unity注册AutoMapper配置文件

我有以下AutoMapper配置文件: public class AutoMapperBootstrap : Profile { protected override void Configure() { CreateMap().ForMember(x => x.NewsArticles, opt => opt.MapFrom(y => y.RssFeedContent)); CreateMap().ForMember(x => x.Id, opt => opt.Ignore()); } } 我正在初始化它: var config = new MapperConfiguration(cfg => { cfg.AddProfile(new AutoMapperBootstrap()); }); container.RegisterInstance(“Mapper”, config.CreateMapper()); 当我尝试在我的构造函数中注入它时: private IMapper _mapper; public RssLocalRepository(IMapper mapper) { _mapper = mapper; } 我收到以下错误: 当前类型AutoMapper.IMapper是一个接口,无法构造。 […]

团结的抽象工厂

我有一个简单的抽象工厂实现: public abstract class ICarFactory{ public abstract ISportsCar CreateSportCar(); public abstract IFamilyCar CreateFamilyCar(); } public abstract class ISportsCar { public abstract void Accelerate(); } public abstract class IFamilyCar { public abstract void Accelarete(); } public class BMWFactory : ICarFactory { public override ISportsCar CreateSportCar() { return new BMWi7(); } public override IFamilyCar CreateFamilyCar() { return […]

Unity工厂注射

我有一个类似下面的界面,我注入了统一容器。 public interface IMyInstanceFactory { IEnumerable GetAll(); } 所有IMyInstance在运行时之前都是已知的,即它们可以在引导程序中设置并且可以从统一检索。 我对IMyInstanceFactory具体实现如下: public class MyInstanceFactory:IMyInstanceFactory { IUnityContainer _container; public MyInstanceFactory(IUnityContainer container) { _container = container; } public IEnumerable GetAll() { return _container.ResolveAll(); } } ..在我的引导程序中,我做了这样的事情: container.RegisterType; container.RegisterType; container.RegisterType; container.RegisterType; 这很好地解决了一切。 但是,我不想依赖于容器或者为此实现IMyInstanceFactory ,有没有办法在没有实现IMyInstanceFactory情况下设置它? Unity是否为此提供了便利? 这种东西…… container.RegisterTypefactory.GetAll()>().IsResolvedBy(unity.ResolveAll); 我知道城堡可以做到这一点,Unity可以做类似的事吗?

Unity – 通过XML工厂

我使用Unity框架作为IoC容器。 我的Config看起来像这样: 我想注册一个容器来使用工厂方法。 我如何使用app.config实现它? 我正在寻找这样的东西: 有什么建议吗?

UnityContainer.Resolve优于Activator.CreateInstance的优势是什么?

我刚刚开始使用Unity。 我仍然想知道它的优点是什么。 UnityContainer().Resolve()可以返回为generics类型T注册的类型的具体实例。 我想我也可以使用Activator.CreateInstance() 。 Activator是.NET Framework中的内置类,所以我想知道Unity的独特function是什么?

使用lambda表达式注册类型

我想知道如何在UnityContainer中实现这样的function: container.RegisterType(Func) // deferred resolution

存储库模式通用应用程序

几天前,当我开始学习使用Unity的Repository Pattern时,我觉得这种模式的主要好处是数据层与业务层的分离。 换句话说,如果需要改变方式,应用程序如何存储数据,这很容易,因为只有一个主模型负责通信。 这意味着,如果应用程序当前将数据保存到序列化的XML文件中,则将此逻辑更改为连接到数据库并不是非常困难。 我发现很少有很好的演示也使用了Unit Of Work层,这看起来非常方便。 让我向您展示一下我的代码。 public class UnitOfWork : IUnitOfWork { private readonly RepositoryContext _context; public IEmployeeRepository Employees { get; set; } public UnitOfWork(RepositoryContext context) { _context = context; Employees = new EmployeeRepository(_context); } public int Complete() { return _context.SaveChanges(); } public void Dispose() { _context.Dispose(); } } 主存储库上下文: public class RepositoryContext […]