Jag försöker skapa någon form av generell objekt generering utifrån ett visst värde (int) . oj, som det ser ut nu kommer du få problem med spårbarhet. Jo visst håller med. Detta är endast exempel kod. Ska googla lite. <code>Hjälp med generell implementation
Men lyckas inte fullt ut. Vore tacksam för lite ideer.
Vill kunna göra följande.
<code>
//Skapa en Repository som matchar inmatadt ID. T ex LoggerRepository
ModuleRepository MR = GetRepositoryByCid(moduleID);
//Ska retunera ett objekt av typen Logger
Logger loggerObject = MR.Load();
//Eller
IModule genericObject = MR.Load();
</code>
<code>
//Interface som alla moduler implementerar.
public interface IModule
{
int Cid {get;}
string ModuleName { get;}
}
//Interface som alla moduleRepository implementerar.
public interface IModuleRepository<T>
{
T Load();
}
//Bas klass
public class ModuleRepository<T> : IModuleRepository<T>
public virtual T Load()
{
return default(T);
}
}
//Klass för att skapa Logger objekt.
public class LoggerRepository : ModuleRepository<Logger>
{
public override Logger Load()
{
return base.Load();
}
}
//Bas klass.
public class Module<T> : IModule
{
public int Cid
{
get { throw new Exception("The method or operation is not implemented."); }
}
public string ModuleName
{
get { throw new Exception("The method or operation is not implemented."); }
}
}
public class Logger : Module<Logger>
{
public Logger()
{
}
}
</code>Sv: Hjälp med generell implementation
Kanske du kan få lite ideer härifrån,
http://www.ayende.com/Blog/ThinkingAboutTheRepositoryAPI.aspxSv: Hjälp med generell implementation
Tänk på att du skriver kod för andra inte bara dig själv, ha det som utgångspunkt så brukar man
oftast skriva en bättre kod.
I ditt fall skulle jag om du nu måste göra som du gör skicka in en sträng som innehåller vad det är du vill ha ut så man lätt kan förstå vad du skall hämta.
Ex. ModuleRepository MR = GetRepositoryByCid("Logger");
Antar att du försöker göra en ObjectFactory...
Jag skulle gjort en XML-fil som Databas för de objekt jag skall kunna skapa dynamiskt.
Sedan skulle jag ha nyckelord för dessa. Jag skulle ladda in hela XMLen när min MR skapas och även ladda in alla objekten o lägga dem i cache... (om de skall användas ofta) annars hade jag laddat in XML-.filen och lagt värderna i en collection för snabbare access...
Sedan nyttja Activator.CreateInsance hanteringen för att skapa objekten vid Load.
Du kan nyttja Geberics här :-) mkt snyggt... Då slipper du en massa casting o trams...
Leta lite på MS Provider pattern eller IoC /DI så kommer du få mer idéer vhur jag menar...
Mvh JohanSv:Hjälp med generell implementation
Tack! Sv: Hjälp med generell implementation
//Denna funkar bra...
string sModuleName = "MyPrettyOne";
Type typeClass = System.Type.GetType(sModuleName);
return (ModuleRepository)System.Activator.CreateInstance(typeClass);
//..men finns det inget sätt att lösa det genom denna princip? (kanske en dum fråga med tanke på ditt svar)
string sModuleName = "MyPrettyOne";
Type typeClass = System.Type.GetType(sModuleName);
ModuleRepository<typeClass> MR = new ...
</code>