繁体   English   中英

解决Unity中的依赖性

[英]Resolving dependency in Unity

我复制了一个使用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)
    {  }
}

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

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

但是,您所做的会稍微复杂一些,因为它使您可以更自由地选择特定的参数值。 在Unity中,您可以通过注入工厂来实现:

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

这似乎就像您的autofac版本。 请记住,首先要注册数据上下文工厂。

只是这样做:

container.RegisterType<IUserRepository, UserEntityRepository>();

这一工作符合我的预期..,(基于Wiktor的解决方案)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM