私はこのような一般的なクラスを持っている:ジェネリッククラスはパラメータを持つTコンストラクタを強制的に使用できますか?
public class Mapper<TEntity, TDataAccess>
where TEntity : Common.IEntity
where TDataAccess : DataAccess, new()
{
public TDataAccess DataAccess { get; set; }
public Mapper()
{
DataAccess = new TDataAccess();
}
/*
* ...
* */
}
およびデータアクセスは、このようなものです:
public class DataAccess
{
public DataAccess()
{}
public DataAccess(string tranName)
{}
// CRUD functionality and other data access staff
}
と継承されたクラスフォームDataAccess
:
public class UserDataAccess:DataAccess
{
public UserDataAccess():base(string.Empty)
{
}
public UserDataAccess(string tranName):base(tranName)
{
// Something to do with user
}
}
し、最終的にUserMapper
マッパーから:
public class UserMapper : Mapper<User,UserDataAccess>
{
// Mapping entity properties with datarows columns
}
tranName
をTDataAccess
のUserMapper
に送信する必要があると想像してください。どのようにDataAccess
クラスを変更せずにこれを行うことができますか?私はDataAccess
のソースにアクセスすることはできませんし、ジェネリックスは型の異なるコンストラクタのオーバーロードを認識しません。 私はUserDataAccess
にプロパティを持つことができ、必要なときにいつでも入力できることを知っていますが、スレッドの安全性の問題のためにできません。
User
クラスは単純なエンティティで、プロパティのみを持ちます。
Activator.CreateInstanceが機能します。ありがとう;) – MDP