如何使用结构图(4.0)将依赖项注入到自定义属性中?MVC5 项目
本文关键字:自定义属性 注入 项目 MVC5 依赖 结构图 何使用 | 更新日期: 2023-09-27 18:36:44
我非常想做这家伙描述的事情(将依赖项传递到自定义属性中):
如何将依赖注入与属性一起使用?
但是,我想用StructureMap 4.0而不是Ninject来做。
我的项目是在我的Data Layer
dll中使用自定义属性设置的,并且我已经安装了StructureMap并在UI Layer
中使用了我的控制器。
我已经确定我可能必须使用StructureMap进行Setter注入:
http://docs.structuremap.net/ConstructorAndSetterInjection.htm
但是,使用数据层中的自定义属性对我来说,它无法正常工作。
我认为为了使事情正常进行,我也应该将Structuremap安装到我的数据层中,并将其放入IoC中.cs:
public static IContainer Initialize()
{
Container container = new Container(x =>
{
x.ForConcreteType<My_AuthorizeADAttribute>().Configure.Setter<My_AppDataContext>().IsTheDefault(); //not sure about this line
});
return container;
}
哦.. 我的自定义属性:
public class My_AuthorizeADAttribute : AuthorizeAttribute
{
public IMy_Data_Context _dataContext;
[SetterProperty]
public IMy_Data_Context DataContext
{
get { return _dataContext; }
set { _dataContext = value; }
}
这是正确的做法吗? 我想我漏掉了一步。 (但话又说回来,我还没有真正在同一项目中的多个 dll 上设置 Structuremap。 想知道使用StructureMap的多个项目是否需要更多的东西。
目前,应用将运行,但不会填充自定义属性中的属性。
更新:这个StackOverflow问题很有帮助:
如何让 StructureMap 与 AngularJs/MVC5 和 WebApi2 Web 项目一起工作
这确实是你不确定的线。
x.ForConcreteType<My_AuthorizeADAttribute>().Configure.Setter<My_AppDataContext>().IsTheDefault(); //not sure about this line
相反,这应该指定您在实例化时实际想要注入到资源库中的内容,如下所示:
x.ForConcreteType<My_AuthorizeADAttribute>().Configure.SetterDependency<IMy_Data_Context>().Is(new My_AppDataContext());
这会将你对IMy_Data_Context
、My_AppDataContext
的具体实现注入到类型 My_AuthorizeADAttribute
中。如果您的属性上有多个IMy_Data_Context
类型的属性,则可能需要担心如何使用您正在使用的默认语法分配多个默认值,但这似乎不是您的用例。
我在StructureMap Gitter房间回复了你,但我也会在这里做。创建属性对象后,是否对属性对象调用Container.BuildUp(object)
?StructureMap 不会在运行时构建属性对象,它只能在之后应用资源库。有关 BuildUp() 的更多信息,请参阅本文的底部:http://structuremap.github.io/setter-injection/。
好的,经过大量研究,显然这是我现在的最佳选择。 这意味着属性依赖于StructureMap,但话又说回来,[SetterProperty]
也会有它。
Asp.Net 带有结构图的 MVC 自定义验证属性