je les classes POCO suivantesobjet moulé à boxed typeof (objet)
public interface IObject
{
Guid Uid { get; set; }
}
public class Boo : IObject
{
public Guid Uid { get; set; }
public String Name { get; set; }
}
public class Foo : IObject
{
public Guid Uid { get; set; }
public String Name { get; set; }
}
Je suis en train d'écrire une méthode générique pour insérer tout type d'objet dans la base de données où le Hériter du type de IObject
. J'utilise la méthode suivante pour que (avec ServiceStackOrmLite dessous):
public interface IDataAccess
{
IDbConnection GetConnection();
Boolean InsertObject<T>(T newObj, IDbConnection connection) where T : IDataObject, new();
}
Essayer d'insérer chaque objet fonctionne séparément comme suit:
public static Boolean AddFoo(this Foo foo)
{
// DataProvider is initiated using an implementation of IDataAccess
return DataProvider.InsertObject(foo, DataProvider.GetConnection());
}
Question:
Je suis en train de utilisez la méthode suivante comme valide pour les deux mais elle échoue. La syntaxe est fausse mais considérez-la comme un pseudo code. Comment puis-je l'obtenir? obj
sera une boîte Foo
ou Boo
exemple
public static Boolean AddObject(this IObject obj)
{
Type objectType = obj.GetType();
return DataProvider.InsertObject(obj as objectType, DataProvider.GetConnection());
}
Il n'existe pas de "boîte d'objet"; si c'était un objet, il ne serait pas encadré. Et n'importe quelle classe/struct/interface/delegate/etc lancera 'object' ... ni 'Foo' ni' Boo' ne seront *** *** en boîte. Pouvez-vous clarifier la question? –
Puisque 'DataProvider.InsertObject' accepte tout' IDataObject', pourquoi s'embêter? Pourquoi ne pas simplement appeler: 'return DataProvider.InsertObject (obj, DataProvider.GetConnection());' –
@MartinMulder vraisemblablement 'InsertObject' utilise le' T' en interne. Ce serait une erreur, OMI, mais nous y voilà. –