ジェネリックファクトリを返すクラスがコンストラクタ内のパラメータを必要とするときに、それを実現する方法はありますか?すべての私の工場は次のようになります。私のように何のパラメータなしのコンストラクタを持たないクラスを使用することはできませんのでActivator.CreateInstance()を使用して、パラメータを持つコンストラクタを持つジェネリックファクトリを作成することはできますか?
public static TServiceClass GetService<TServiceClass>()
where TServiceClass : class, new()
{
TServiceClass serviceClass = null;
string repositoryName = typeof (TServiceClass).ToString().Replace("Service", "Repository");
Type type = Type.GetType(repositoryName);
if (type != null)
{
object repository = Activator.CreateInstance(type);
serviceClass = (TServiceClass)Activator.CreateInstance(typeof (TServiceClass), new[]{repository});
}
return serviceClass;
}
しかし、これはもちろん動作しません。
public static class UserServiceFactory
{
public static UserService GetService()
{
UserRepository userRepository = new UserRepository();
return new UserService(userRepository);
}
}
私はこのような何かを試してみました一般的なパラメータですが、私は近くにいるように感じます。私はGetService(Type serviceClassType)
のようなServiceクラスを渡すことを考えましたが、メソッドの戻り値の型を宣言することはできず、呼び出したいときにキャストする必要がありました。
別の方法がありますか?これも可能ですか?
@vcsjonesどういう意味ですか?通常は私の工場を使ってDIingを行います(サービスがリポジトリを必要とし、私の工場がそれを処理しているのが分かるように)。サービスごとに具体的な実装が必要ではないでしょうか?また、担当者の回答セクションに投稿してください! – SventoryMang
申し訳ありませんが、私は誤解しました。 – vcsjones
@vcsjonesあなたは正しいですが、new()は削除されました。だから回答セクションに投稿してください! – SventoryMang