当我在SM中注册以下内容然后尝试创建实例时,我得到了异常 - 'StructureMap异常代码:202没有为PluginFamily定义默认实例......'
Scan(x =>
{
x.Assembly("MVCDemo");
x.Assembly("MVCDemo.Infrastructure");
x.Assembly("MVCDemo.Services");
x.AddAllTypesOf(typeof (IRepository<>));
});
ForRequestedType<IRepository<Employee>>().TheDefault.Is.ConstructedBy(() => new EmployeeRepository());
var tmp4 = ObjectFactory.GetInstance<IRepository<Employee>>();
Run Code Online (Sandbox Code Playgroud)
当我尝试获取IRepository的实例时会发生异常.
有谁知道我错过了什么?
干杯
奥利
在我的应用程序中,每个租户都有自己的StructureMap容器.
在运行时,可以关闭或重新启动租户实例.我应该做什么整理(比如调用IContainer.Dispose)或者我应该让Garbage Collection做它的工作吗?
我们确实有许多实现IDisposable的单例实例.理想情况下,我们应该在处理容器之前调用Dispose.我知道这是在嵌套容器上自动完成的,但不确定标准容器?
谢谢,
本
我正在使用带有MVC3的StructureMap我想将它设置为使用一些对象作为单例或给它们一个Per Request生命.我在那里看到的所有示例都是针对StructureMap的旧语法,因为当我尝试示例时,我看到它已被删除.
如何使用较新的使用<>进行此操作.对于<>语法?
我正在使用structureMap作为ASP.NET MVC网站的IoC/DI.效果很好.
通常,我有我的控制器传递接口和structureMap +贪婪的构造函数==工作得很好.
例如.
public void FooController : Controller
{
public FooController(IPewPew pewPew) { .. }
}
Run Code Online (Sandbox Code Playgroud)
等等..
但是......我的一个控制器(只有一个em)希望传入两个字符串.
例如..
public void FooController2 : Controller
{
public FooController2(IPewPew pewPew, string aaa, string bbb) { .. }
}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以用StructureMap做到这一点吗?有没有办法说,当列出字符串"aaa"时,请使用此值=>"hi!";
我真的不想将所有这些字符串放入具有接口的具体类中.
就像我想说的那样.
For<string>().WithName("aaa").Use<string>().WithValue("hi");
Run Code Online (Sandbox Code Playgroud)
干杯!
我对结构图仍然很新,所以我无法理解为什么这不起作用.我正在向存储库注入"连接字符串",并且我不断从结构图中收到以下错误:
StructureMap异常代码:205缺少所请求的实例属性"purchaseOrdersFilePath"for InstanceKey"a04b4f71-4171-4e9f-b98d-170fc9ee005f"
在旁注中,连接字符串是引号,因为我正在使用linq到xml,因此"连接字符串"实际上是文件的路径.我正在添加它,以防万一它可能与问题有关.
我的代码如下:
public class PurchaseOrderRepository : IPurchaseOrderRepository
{
private readonly string PurchaseOrdersFilePath;
public PurchaseOrderRepository(string purchaseOrdersFilePath)
{
if (string.IsNullOrWhiteSpace(purchaseOrdersFilePath)) throw new ArgumentNullException("purchaseOrdersFilePath");
PurchaseOrdersFilePath = purchaseOrdersFilePath;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的Global.asax文件中,我有以下配置语句:
private void RegisterControllerFactory()
{
var ioc = new Container();
var controllerFactory = new IocControllerFactory(ioc);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
ioc.Configure(r => r.Scan(x =>
{
x.AssemblyContainingType<HomeController>();
x.AddAllTypesOf<IController>();
x.Include(t => typeof(IController).IsAssignableFrom(t));
}));
ioc.Configure(r => r
.ForConcreteType<PurchaseOrderRepository>()
.Configure.Ctor<string>().Is(@"C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml"));
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
谢谢你的帮助.
我正在尝试使用structuremap bootstrapper启动带nancyfx https://github.com/NancyFx/Nancy.Bootstrappers.StructureMap
这是我的设置:
protected override void ConfigureApplicationContainer(IContainer container)
{
container.Configure(x =>
{
x.ForSingletonOf<IRazorConfiguration>()
.Use<DefaultRazorConfiguration>();
x.ForSingletonOf<ISessionContainer>().Use<SessionContainer>();
x.For<IRepository>().LifecycleIs(new HttpContextLifecycle()).Use<Repository>();
x.Scan(scanner=>
{
scanner.TheCallingAssembly();
scanner.AddAllTypesOf<IRepository>();
});
});
base.ConfigureApplicationContainer(container);
}
public interface IRepository
{
void Save();
}
public class Repository:IRepository
{
ISessionContainer _session;
public Repository(ISessionContainer container)
{
_session = container;
}
public void Save()
{
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用时var repo = ObjectFactory.GetInstance<IRepository>();,我得到这个例外:
StructureMap Exception Code: 202
No Default Instance defined for PluginFamily Infrastructure.IRepository, Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Run Code Online (Sandbox Code Playgroud) 结构图方法,scan.WithDefaultConventions(); 在structuremap.MVC 5中假定使用约定IMyClassName,MyClassName作为依赖注入.如果您只创建了类,这没关系.
使用开箱即用的ASP.NET MVC 5应用程序,约定IMyClassName,MyClassName不会退出用户身份.如何配置structuremap以忽略ASP.NET Framework接口/类?
structuremap asp.net-mvc dependency-injection ioc-container structuremap3
我正在.NET 4.0上构建一个ASP.NET MVC 2.0应用程序,并使用Structuremap 2.6.1 for IoC.我最近添加了一个ICookie和Cookie类,Cookie类将HttpContextBase作为构造函数参数(见下文),现在当我运行我的应用程序时,我收到此错误:没有为PluginFamily System.Web.HttpContextBase定义默认实例.
我之前在另一个具有相同堆栈的MVC应用程序中使用过此方法,但没有收到此错误.我错过了什么吗?如果我确实需要在我的structuremap配置文件中为HttoContextBase添加一些映射代码,我会使用什么?
帮助会很棒!!!
Cookie.cs
public class Cookie : ICookie
{
private readonly HttpContextBase _httpContext;
private static bool defaultHttpOnly = true;
private static float defaultExpireDurationInDays = 1;
private readonly ICryptographer _cryptographer;
public Cookie(HttpContextBase httpContext, ICryptographer cryptographer)
{
Check.Argument.IsNotNull(httpContext, "httpContext");
Check.Argument.IsNotNull(cryptographer, "cryptographer");
_cryptographer = cryptographer;
_httpContext = httpContext;
}
public static bool DefaultHttpOnly
{
[DebuggerStepThrough]
get { return defaultHttpOnly; }
[DebuggerStepThrough]
set { defaultHttpOnly = value; }
}
public static float DefaultExpireDurationInDays
{
[DebuggerStepThrough]
get …Run Code Online (Sandbox Code Playgroud) 在另一个线程上与@Aaronaught的对话中,我已经开始将我的应用程序转换为使用依赖注入和存储库模式,但我有点卡住了.我想我得到了模式的大部分内容和流程,但我坚持将StructMap实现到ASP.NET MVC 2.我读过的例子似乎已经过时了,我最新版本的Structure Map是我的使用(2.6.1).
我希望有人可以根据我粘贴的代码填补空白:
public static class Bootstrapper {
public static void Configure() {
ObjectFactory.Configure(x => {
x.For<DataContext>().Add(new DataContext());
});
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我可以从我的控制器中获取DataContext的实例:
protected DataContext dc = ObjectFactory.GetInstance<DataContext>();
Run Code Online (Sandbox Code Playgroud)
我知道做错了,但我对如何避免它感到困惑.继续,这是控制器工厂:
public class StructureMapControllerFactory : DefaultControllerFactory {
protected override IController GetControllerInstance(
RequestContext rc,
Type ct) {
return (ObjectFactory.GetInstance(ct) as Controller);
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白这究竟是什么,但它在示例中,所以我正在复制它.有人可以向我解释一下吗?
现在从我的理解,应该是注册表,如果我理解正确,全局化对象实例,如DataContext.那是对的吗?如果是这样,我该如何为StructureMap 2.6.1编写注册表?我看到的示例代码似乎已经过时,因为当我编写它时,我没有相同的选项(通过IntelliSense),所以我不确定如何编写它...
我将非常感谢您填写我所拥有的空白.
PS我对依赖注入和存储库的经验总共约8小时.
UPDATE /结论
阅读下面的@ Pure的优秀解释并观看他在子评论中引用的tekpub视频,我选择了Ninject而不是StructureMap.
我不知道Ninject是否比StructureMap更好,但从我的观点来看,开始并开始变得更容易.
structuremap asp.net-mvc dependency-injection repository-pattern
在我正在处理的当前应用程序中,我有一个自定义的ControllerFactory类,它创建一个控制器并自动设置Elmah ErrorHandler.
public class BaseControllerFactory : DefaultControllerFactory
{
public override IController CreateController( RequestContext requestContext, string controllerName ) {
var controller = base.CreateController( requestContext, controllerName );
var c = controller as Controller;
if ( c != null ) {
c.ActionInvoker = new ErrorHandlingActionInvoker( new HandleErrorWithElmahAttribute() );
}
return controller;
}
protected override IController GetControllerInstance( RequestContext requestContext, Type controllerType ) {
try {
if ( ( requestContext == null ) || ( controllerType == null ) )
return base.GetControllerInstance( requestContext, controllerType ); …Run Code Online (Sandbox Code Playgroud) structuremap asp.net-mvc dependency-injection repository-pattern asp.net-mvc-3
structuremap ×10
asp.net-mvc ×4
c# ×3
.net ×1
.net-4.0 ×1
asp.net ×1
dsl ×1
exception ×1
nancy ×1
registry ×1