我正在尝试将变量DB设置为全局并在任何地方使用。我的问题是我正在初始化两倍的db。在基本控制器和附件中。即:
public class SettingsAttribute : ActionFilterAttribute {
public ApplicationDbContext db = new ApplicationDbContext();
public override void OnActionExecuting(ActionExecutingContext filterContext) {
...
}
和
[Settings]
public class BaseController : Controller {
public ApplicationDbContext db = new ApplicationDbContext();
protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state) {
...
}
我只想创建一次var db,并访问项目中的任何地方。我该怎么做?
在这种情况下和(类似情况下)的最佳实践是实现一种DI/IoC模式,正如@Dawid Ferrency在他的回答中提到的那样。如果您以前从未使用过它,那么一开始它有点抽象,但从长远来看,它非常有用,尤其是当您的对象变得复杂时。您可以在线搜索文章以了解更多关于模式本身的信息。
@Dawid Ferrency提到了Unity容器,但它不仅限于此,您可以使用任何您想要的容器(如果需要,甚至可以创建自己的容器)。我个人使用Ninject,因为它有很多支持文档,而且我发现它很容易实现。
在您的情况下(DB上下文),我将使用N注入
和DI/IoC
如下:
1-为DB上下文DAL声明接口:
public interface IModelDBContext
{
//Your methods should go here
}
您的混凝土等级:
公共类ModelDBContext:DbContext,IModelDBContext{//此处的方法和其他内容}
(在我的情况下是n注入,但您可以使用任何其他容器)
public class NinjectDependencyResolver : IDependencyResolver
{
//Bunch of initialization and methods
Check out this : [Using ninject in MVC][2].
//Binding piece (Very important)
private void AddBindings()
{
//Context DB Binding
kernel.Bind<IModelDBContext>().To<ModelDBContext>();
//Other binding
}
}
这是有趣和令人兴奋的部分。在应用程序中的任何位置,如果需要实现特定的DB上下文,请将其与构造函数一起注入,您可以使用它:
在您的情况下,它将是这样的:
Public YourConcreteClass
{
Private IModelDBContext ModelDB; //Initiate an instance that you will use .
//DI by constructor
public YourConcreteClass(IModelDBContext mDB)
{
ModelDB=mDB;
}
//in the rest of your code you call ModelDB that has access to all of the methods and attributes you might need
}
把它放在另一个类中(例如,一个助手),然后像这样访问它怎么样:
private ApplicationDbContext db = null;
public ApplicationDbContext Db {
get {
if (db == null)
db = new ApplicationDbContext();
return db;
}
}
考虑使用依赖注入模式。对于NET中有一个Unity容器,它实现了一个轻量级的、可扩展的依赖注入容器。检查的依赖项注入容器列表。网,但它已经很旧了。
通常,依赖注入被称为控制反转(IoC)。这意味着,使用DB类的类不需要依赖于特定的DB类。相反,它们只需要一个特定的接口。实现此接口的DB类是从外部注入的,并且您的类与DB类的特定实现解耦。
从以下几个地方开始:
在所有情况下,重要的是,如果允许用户Y访问该公司,微服务本身仍然必须检查是否允许用户Y对该公司进行某种操作。因此,此用户到公司的匹配仅用于确保用户对公司有访问权限。 我并不是真的很喜欢这些方法,因为将消息放入队列(1)意味着每个服务都必须被告知一个更改。使用Zuul验证(2)也不是真正实用的,因为它应该只是一个网关。
问题内容: 我该怎么做: 在全球范围内,就像在主应用程序或功能中一样,是否有任何iFrame,img src等都可以使用? Docs在解释这一点方面很差。 问题答案: 我只是阅读了您先前回答中的评论。不知道您是否找到解决方案。似乎您在寻找事物的白名单类型。最近,我发现$ sce有一个白名单功能。 摘自AngularJS文档中的$ sceDelegateProvider : 有了这个,您可以像这样在
正在尝试使用asp。net和mvc。 我有一个像这样的< code>Weather类: 我用来发出< code>GET请求的方法如下所示: 我请求的 URI 返回 JSON 对象。 我想访问< code >“Weather”对象,提取属性< code>main和< code>description,并在我的< code>GetWeather中返回一个列表,其中< code>JSON对象的天气属性与
如何加密列产品ID在Kendo ui网格用户看不到我的真实ID?我使用ASP. NET MVC 5。 谢谢你!
在“视图”菜单栏中“视图角度”栏点击“全球视图”可以迅速切换到全球视图视角。
在“视图”菜单栏中“视图角度”栏点击“全球视图”可以迅速切换到全球视图视角。