1

こんにちは、プロジェクトで UOW とリポジトリ パターンを使用しており、次のコードを作成しました。

// 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

前もって感謝します

4

1 に答える 1

2

クラス efuow_company は iefuow_company インターフェイスを実装していません。

于 2013-05-31T09:12:24.660 に答える