解决Unity中的依赖关系

时间:2013-12-27 17:12:03

标签: c# dependency-injection inversion-of-control unity-container

我复制了一个使用AutoFac作为IOC的存储库模式示例,但是在我的项目中我使用UNITY,任何关于如何在Unity 3.0中编写它的想法

AutoFac:

  builder.Register<IUserRepository>(x => new UserEntityRepository (x.Resolve<IDataContextFactory<SampleDataContext>>())).SingleInstance();

将注入IOC的类:

public class UserEntityRepository : EntityRepository<User, SampleDataContext>, IUserRepository
{
    public UserEntityRepository(IDataContextFactory<SampleDataContext> databaseFactory)
        : base(databaseFactory)
    {  }
}

3 个答案:

答案 0 :(得分:1)

如果依赖项已注册,Unity将自动解析构造函数参数。那么最简单的版本就是

container.RegisterType<IUserRepository, UserEntityRepository>( 
   new ContainerControlledLifetimeManager() );

但是,您所做的事情稍微复杂一些,因为它可以让您更自由地选择特定的参数值。在Unity中,您可以使用注塑工厂:

container.RegisterType<IUserRepository>( 
    new InjectionFactory(
       c => new UserEntityRepository( 
         c.Resolve<IDataContextFactory<SampleDataContext>> ), 
    new ContainerControlledLifetimeManager() );

这几乎就像你的autofac版本。请记住首先注册数据上下文工厂。

答案 1 :(得分:0)

这样做:

container.RegisterType<IUserRepository, UserEntityRepository>();

答案 2 :(得分:0)

这个按预期工作..(基于Wiktor的解决方案)

        container.RegisterType<IUserRepository>                
           (new ContainerControlledLifetimeManager(),
           new InjectionFactory(c => new UserEntityRepository 
              (new DefaultDataContextFactory<SampleDataContext>())));