ASP-NET Core 2.0に汎用リポジトリとビジネスオブジェクトを持つ小さなアプリケーションフレームワークを構築しています。一般的なコンテキストでクラスの型を取得する
public interface IEntity
{
int Id { get; set; }
}
public class Person : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Repository<TEntity> where TEntity : IEntity
{
public Repository()
{
var myClass = typeof(TEntity);
var myClassName = myClass.Name; // I would expect "Person" - but it says "IEntity" - what am I doing wrong?
}
}
public abstract class BusinessBase<TEntity> where TEntity : IEntity
{
private Repository<IEntity> _repository { get; set; }
public BusinessBase()
{
var myClass = typeof(TEntity);
var myClassName = myClass.Name; // "Person" as expected
this._repository = new Repository<IEntity>();
}
}
public class BusinessPerson : BusinessBase<Person>
{
}
var x = new BusinessPerson();
「リポジトリ」クラスのジェネリックTEntityの名前を読み取ろうとしていることに気づくでしょう。私はなぜそれが "人"を言っていないのか理解できませんでした。任意のアイデアや助け?
私のアプローチの一般的な設計についてここでは話しません。私の実際のプログラムは違って見えますが、私はできるだけ単純化しましたので、100行のコードを読む必要はありません。
に見てあなたは '新しいリポジトリ()'と述べました。私はあなたが '新しいリポジトリが必要だと思う。()' –
いいえ、申し訳ありませんが、これはコンパイルされません。 : – Ingmar
'_repository'も同じ型にする必要があるので –