こんにちは、ここにあるコード例を変更しようとしています http://imar.spaanjaars.com/577/aspnet-n-layered-applications-implementing-a-repository-using-ef-code-first-part-5
彼の例では、構造マップを使用しています。それをウィンザーに変換すると、次を使用して 1 つのリポジトリで動作させることができます。
container.Register(Component.For<IUnitOfWorkFactory>().ImplementedBy<EFUnitOfWorkFactory>(),
Component.For<IUnitOfWork>().ImplementedBy<EFUnitOfWork>(),
Component.For<Model.Repositories.IPeopleRepository>().ImplementedBy<PeopleRepository>().LifestyleTransient());
しかし、私が本当にやりたいことは、すべてのリポジトリベースのインターフェースをその実装にマップすることです。これが IRepository です。T はエンティティ、K は主キーの種類です。
public interface IRepository<T, K> where T : class
{
}
その実装は
public abstract class Repository<T> : IRepository<T, int>, IDisposable where T : DomainEntity<int>
{
}
私のコントローラーには、コンストラクターパラメーターとしてインターフェイス IPeopleRepository があります。
public interface IPeopleRepository : IRepository<Person, int>
{
}
public class PeopleRepository : Repository<Person>, IPeopleRepository
{
}
このようなすべてのリポジトリを登録するために1つの登録をしたいのですが、一致せず、登録されていないサービス「Spaanjaars.ContactManager45.Model.Repositories.IPeopleRepository」というエラーが表示されます
container.Register(Component.For(typeof(IRepository<,>))
.ImplementedBy(typeof(Repository<>))
.LifestylePerWebRequest());
これに関して何が欠けていますか?私のレポジトリには2つのジェネリック型があるからですか?