我與已經給出了使用FluentNHibernate轉換的MVC 4應用程序使用實體框架5.從NHibernate的轉換,以一個實例的實體框架檢查類型
該項目的任務工作的團隊使用StructureMap的依賴注入。目前,國際奧委會是這樣的:
ForSingletonOf<ISessionFactory>().Use(SessionConfiguration.get_session_factory);
For<ISession>()
.HttpContextScoped()
.Use(ctx => ctx.GetInstance<ISessionFactory>().OpenSession())
.EnrichWith((ISession session) => new TransactionManagementSessionDecorator(session));
該項目包含了一些對象擴展,它們是下列之一:
public static bool is_instance_of<T>(this object instance)
{
if (instance is INHibernateProxy)
return ObjectFactory.GetInstance<ISession>().GetSessionImplementation().PersistenceContext.Unproxy(instance) is T;
return instance is T;
}
上述擴展將用於例如這樣的:
CartItemType get_cart_item_type(Registration registration)
{
if (registration.is_instance_of<FirstTimeRegistration>())
return CartItemType.FirstTime;
if (registration.is_instance_of<ReplacementRegistration>())
return CartItemType.Replacement;
if (registration.is_instance_of<RenewalRegistration>())
return CartItemType.Renewal;
...
...
throw new ArgumentException("Registration Type is unknown");
}
類FirstTimeRegistration,ReplacementRegistration和RenewalRegistration都繼承了Registration類。
下已經被添加到我們的國際奧委會轉換爲EF:
For<RegistrationContext>()
.HttpContextScoped()
.Use(x => new RegistrationContext());
For(typeof(IEFRepository<>)).Use(typeof(EFRepository<>));
我似乎有是找出我如何可以改變is_instance_of <>擴展與實體框架工作的問題?
這似乎工作正常,即使與代理類。謝謝。 – 2013-03-06 20:40:26
我這樣做了,所以使用該方法的代碼沒有改變。 'public static bool is_instance_of(this object instance) { return typeof(T).IsInstanceOfType(instance); }' –
2013-03-08 06:16:05
更好。我在我的項目中嘗試了它,並且Resharper提出了一條更簡單的路線:'返回實例是T;' – Ackroydd 2013-03-08 21:15:31