好吧,我有一个项目,目前我正在使用.NET 4.0,因为我希望这个应用程序与Windows XP兼容,因为EF 5.0仅适用于Windows 7及更高版本。
但是,我想用.NET 4.5的功能实现应用程序的某些部分,例如EF 5.0。
因此,对于我的数据库访问,我有一个reposotry类,现在使用EF 4.0,这是一个独立的dll,所以我可以创建使用EF 5的其他存储库dll,并在我的项目导入两个dll,然后我可以实例化根据我可以使用的EF 5.0版本更正存储库。这是配置文件中的参数。这是最好的方式吗?
我问这个是因为我不知道我必须在哪里声明我的界面。因为我的存储库类需要实现这个接口,但是这会把我的dll绑定到我的应用程序,但是我需要在两个不同的应用程序中使用这个存储库,所以我想实现一次,并在许多应用程序中使用。我想要独立的dll,因为现在是两个应用程序,但将来可以更多。
想要在使用存储库的应用程序中使用接口的原因是因为我想根据配置文件设置在运行时实例化正确的存储库。因此,在未来我可以实现新的存储库,并且不需要更改代码。
EDIT1:我读到了多目标,但是如果在我的项目中我使用.NET 4.0的功能而我想要编译3.5,我会收到错误,因为3.5中不存在此功能。那是对的。那么唯一的方法是保留两个不同的项目?这将是一项双重工作。
感谢。 Daimroc。
答案 0 :(得分:1)
因此,对于我的数据库访问,我有一个现在使用EF的reposotry类 4.0,这是一个独立的dll,所以我可以创建其他使用EF 5的存储库dll,并在我的项目中导入两个dll,然后我可以 根据EF 5.0的版本实例化正确的存储库 我可以用。这是配置文件中的参数。是这个 最好的方式?
你可以走这条路,我真的没有看到它的问题,除非你认为这可能会导致未来的维护/开发问题。您还可以考虑其他一些事情。我认为两者都是完全有效的,可能只是个人意见/偏好。
我问这个是因为我不知道我必须在哪里声明我的界面。 因为我的存储库类需要实现这个接口,但是 然后把我的dll绑在我的应用程序上,但我需要使用它 两个不同的应用程序中的存储库,所以我想实现 曾经,并在许多应用程序中使用。我想要独立的dll,因为 现在是两个应用程序,但在将来,可以更多。
想要在使用的应用程序中使用接口的原因 存储库是因为我想在运行时实例化 正确的存储库,根据配置文件设置。所以在 fututre我可以实现新的存储库,没有必要 改变代码。
听起来您需要创建另一个用于在UI和Repository库之间进行通信的库。设置恰到好处可能有点棘手和压倒性。基本上,您希望网关DLL容纳接口和业务对象。您的应用程序将引用此DLL,此DLL将引用您的存储库。
根据您的需要,您实际上可能需要设置另一个中间DLL,它实际上只容纳您的接口和大多数基本实用程序类。这将允许您使EF对象实现与应用程序使用的相同的接口,而不需要您的网关DLL必须来回映射业务对象和EF对象。
EDIT1:我读到了多目标定位,但如果在我的项目中,我会使用 例如.NET 4.0的功能,我想要编译3.5,我得到 错误,因为3.5中不存在此功能。那是对的。 那么唯一的方法是保留两个不同的项目?这将是一个 双重工作。
我相信你可以通过使用我上面提到的预处理器指令来解决这个问题。下面是一个使方法句柄工作方式不同的示例,具体取决于框架是否为.NET 2.0;这只是一个例子,没有经过测试。需要设置DefineConstants,但这应该允许您为多个框架目标处理1个项目,同时还能够在发布时使用更新的.NET功能。
public Person FindPersonByName(List<Person> people, string name)
{
#if DOTNET_20
foreach(Person person in people)
{
if (person.Name == name)
return person;
}
return null;
#else
return people.FirstOrDefault(p => p.Name == name);
#endif
}
我希望这对找到合适的解决方案很有帮助,也是最好的运气。