JJo*_*oos 5 c# extension-methods ninject repository-pattern ninject-2
我得到了一些带有扩展方法的静态类,它们使用存储库模式为实体添加"业务逻辑".
现在有时我需要IRepository在这些扩展函数中创建一个新的.
我目前正在通过我正在扩展的对象访问我的Ninject内核来解决它,但它真的很难看:
public static IEnumerable<ISomething> GetSomethings(this IEntity entity)
{
using (var dataContext = entity.kernel.Get<IDataContext>())
return dataContext.Repository<ISomething>().ToList();
}
Run Code Online (Sandbox Code Playgroud)
我还可以创建一个静态构造函数,以某种方式从工厂访问Ninject内核,Ninject 2中是否已有基础结构?
有人知道更好的解决方案吗?有没有人对这种方式有一些意见来实现业务逻辑.
关于扩展方法以及它们如何获取内容的问题。你有两种方法:
服务位置 - 有一个全局内核并下拉到服务位置(这与依赖注入不同)。但这里的问题是你的实体(或其扩展)不应该假设它的上下文,而是要求它
因为你是一个扩展方法,所以你要扩展的东西可以传递给你你需要的东西
正如您或多或少猜到的那样,Ninject 试图劝阻您不要这样做(拥有一个成为垃圾场的全局内核)。一般来说,无论您使用什么,扩展(例如,MVC 或 WCF)都会在适当的情况下提供一些东西。例如,WCF扩展有http://github.com/ninject/ninject.extensions.wcf/blob/master/source/Ninject.Extensions.Wcf/NinjectServiceHost.cs
这里更大的问题是,像这样的依赖关系可能不应该传播到实体级别 - 它应该停留在服务级别并从那里传播(使用 DDD 词汇)。
您可能会发现我的这个答案很有趣,因为它稍微涵盖了这个领域(更多来自架构概念角度的 Ninject 技术)
| 归档时间: |
|
| 查看次数: |
4487 次 |
| 最近记录: |