C# 如何使用StructureMap(4.0)将依赖项注入自定义属性?MVC5项目
我非常想做这家伙描述的事情(将依赖项传递到自定义属性中): 但是,我想用StructureMap 4.0而不是Ninject来实现它 我的项目是在我的C# 如何使用StructureMap(4.0)将依赖项注入自定义属性?MVC5项目,c#,asp.net-mvc-5,structuremap4,C#,Asp.net Mvc 5,Structuremap4,我非常想做这家伙描述的事情(将依赖项传递到自定义属性中): 但是,我想用StructureMap 4.0而不是Ninject来实现它 我的项目是在我的数据层dll中使用自定义属性设置的,我已经安装了StructureMap,并在我的UI层中使用我的控制器 我已经决定可能必须使用StructureMap执行Setter注入: 但是,在数据层中使用自定义属性时,它不能正常工作 我认为,为了使事情顺利进行,我还应该将Structuremap安装到我的数据层中,并将其放在IoC.cs中:
数据层
dll中使用自定义属性设置的,我已经安装了StructureMap,并在我的UI层
中使用我的控制器
我已经决定可能必须使用StructureMap执行Setter注入:
但是,在数据层中使用自定义属性时,它不能正常工作
我认为,为了使事情顺利进行,我还应该将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;
}
这样做对吗?我想我漏了一步。(不过,我还没有在同一个项目中的多个DLL上真正设置Structuremap。我想知道多个具有Structuremap的项目是否还需要其他功能
目前,应用程序将运行,但自定义属性中的属性不会填充
更新:此StackOverflow问题非常有用:
这确实是一条你不确定的路线
x.ForConcreteType<My_AuthorizeADAttribute>().Configure.Setter<My_AppDataContext>().IsTheDefault(); //not sure about this line
x.ForConcreteType().Configure.Setter().IsTheDefault();//不确定这一行
相反,这应该指定实例化时实际要注入setter的内容,如下所示:
x.ForConcreteType<My_AuthorizeADAttribute>().Configure.SetterDependency<IMy_Data_Context>().Is(new My_AppDataContext());
x.ForConcreteType().Configure.setterDependence().Is(新的My_AppDataContext());
这将把
IMy_Data_Context
,My_AppDataContext
的具体实现注入类型My_authorizedAttribute
。如果属性上有IMy_Data_Context
类型的多个属性,您可能需要担心如何使用我们使用的默认语法分配多个默认值我们正在使用,但这似乎不是您的用例。我在StructureMap Gitter room中响应了您,但我也会在这里执行。您是否正在调用Container.build(object)
在属性对象创建后对其进行设置?StructureMap在运行时不构建属性对象,它只能在创建后应用setter。有关building()的详细信息,请参阅本部分的底部.好的,经过大量研究,显然这是我现在的最佳选择。这意味着该属性依赖于StructureMap,但同样,[SetterProperty]
也会有它
hmmm…SetterDependence没有出现。(这不是一个选项)。有没有我需要的参考资料?好的,我假设将.setterDependence更改为.Setter是正确的术语,因为对4.0代码的审查没有显示.setterDependence。还有他们的新文档在这里:不幸的是,它仍然不起作用。在每个dll中都有一个IoC.cs文件是设置多个项目的正确方法吗s
x.ForConcreteType<My_AuthorizeADAttribute>().Configure.SetterDependency<IMy_Data_Context>().Is(new My_AppDataContext());