Unity和Repository模式

时间:2013-05-31 04:31:49

标签: unity-container repository-pattern unit-of-work

您好我在我的项目中使用了UOW和Repository模式,并创建了以下代码:

// Interfaces
public interface IUnitOfWork : IDisposable
{
    IGenericRepository<Company> CompanyRepository { get; }
    void Commit();
}

public interface IEFUOW_Company : IUnitOfWork
{
    bool CreateCompanyForUser(RegisterModel model, string userName);
}

// Implementation
public class EFUOW_Company : EfUnitOfWork
{
    public EFUOW_Company()
    {
    }
}

public class EfUnitOfWork : Disposable, IUnitOfWork
{
    private DALDbContext _dataContext;
    private EfGenericRepository<Company> _companyRepo;
    public DbSet<Company> Companies { get; set; }

    public EfUnitOfWork()
    {
        _companyRepo = null;
    }
}

// Unity Registration
container.RegisterType<IUnitOfWork, EfUnitOfWork>(new HttpContextLifetimeManager<IUnitOfWork>());
         .RegisterType<IEFUOW_Company, EFUOW_Company>(new HttpContextLifetimeManager<IEFUOW_Company>());


// Error Message @ Compile

Error   105 The type 'DataAccessLayer.UnitOfWork.EFUOW_Company' cannot be used as type parameter 'TTo' in the generic type or method 
'Microsoft.Practices.Unity.UnityContainerExtensions.RegisterType<TFrom,TTo>(Microsoft.Practices.Unity.IUnityContainer, Microsoft.Practices.Unity.L
ifetimeManager, params Microsoft.Practices.Unity.InjectionMember[])'. There is no implicit reference conversion from '
DataAccessLayer.UnitOfWork.EFUOW_Company' to 'DataAccessLayer.UnitOfWork.IEFUOW_Company'.

我无法理解为什么它抱怨转换,因为我是Unity的新手,这是我第一次尝试构建这种类型的逻辑。

我希望能够创建不同的基于IUnitOfWork的接口/实现,以便我可以重用IUnitOfwork中的代码及其实现EfUnitOfWork

提前致谢

1 个答案:

答案 0 :(得分:2)

类efuow_company没有实现iefuow_company接口。