有什麼辦法來實現一個通用的工廠,當它返回類需要在構造函數的參數?我所有的工廠是這樣的:是否有可能使用Activator.CreateInstance()的參數創建一個具有構造函數的泛型工廠?
public static class UserServiceFactory
{
public static UserService GetService()
{
UserRepository userRepository = new UserRepository();
return new UserService(userRepository);
}
}
我想是這樣的:
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;
}
然而,這當然不會工作,因爲我不能使用無參數的構造函數的類一個通用的參數,但我覺得我很接近。我想到了通過服務類像GetService(Type serviceClassType)
但我不能宣佈該方法的返回類型,就必須投它時,我把它稱爲,這是我想避免的。
難道還有其他的方法嗎?這甚至有可能嗎?
@vcsjones你能否詳細闡述你是什麼意思?通常,我使用我的工廠進行DIing(正如您可以看到該服務需要一個存儲庫,而我的工廠負責這一點)。這不再需要每個服務的具體實現嗎?也請在回答部分張貼代表! – SventoryMang
對不起,我誤讀了。 – vcsjones
@vcsjones你是正確的,但刪除new()工作。所以,請在答案部分發帖! – SventoryMang