views:

510

answers:

2

Hi everybody!

I 'm using PRISM and in the Bootstrapper class i did override the ConfigureContainer() method. There is nothing fancy in it just these lines:

protected override void ConfigureContainer() {

        Container.RegisterType<IDataContext, SQLDataContext>(new InjectionConstructor(@"Server=localhost\SQLExpress;User Id=sa;Password=xxxxx;Database=MyDatabase"));
        base.ConfigureContainer();
    }

At "debug-time" i try to call Container.Resolve() but this gives me the following error:

{"Resolution of the dependency failed, type = \"Photo.DAL.Abstract.IDataContext\", name = \"\". Exception message is: The current build operation (build key Build Key[Photo.DAL.Concrete.SQLDataContext, null]) failed: Value cannot be null.\r\nParameter name: stream (Strategy type BuildPlanStrategy, index 3)"} System.Exception {Microsoft.Practices.Unity.ResolutionFailedException}

But when i do

Container.IsTypeRegistered(typeof(IDataContext))

i get true!!!

What am i missing???

A: 

It could be one of two things.. it's not clear from your exception exactly...

  1. Likely there is another inner exception that might be masked?

  2. Otherwise it might be that your SqlDataContext class has a constructor that accepts a stream?

Again, the exception isn't quite clear enough (at least to me). If neither of these suggestions helps, could you post the full out put of $exception.ToString() in your question?

Edit: according to your full stack trace, the line of code failing is this one:

using (Stream stream = Assembly.
                       GetExecutingAssembly().
                       GetManifestResourceStream("Photo.DAL.Entities.Entities.map"))
{
    //This line is failing with null argument
    mapping = XmlMappingSource.FromStream(stream);
}

Your resource stream is coming back null, which either indicates your resource does not exist or the assembly couldn't be loaded (sometimes this refers to a satellite assembly). I would suspect the former first... check to make sure the Build setting is correct on your .map file.

Anderson Imes
See my answer please!
savvas sopiadis
A: 

This is the full stack:

Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "Photo.DAL.Abstract.IDataContext", name = "". Exception message is: The current build operation (build key Build Key[Photo.DAL.Concrete.SQLDataContext, null]) failed: Value cannot be null. Parameter name: stream (Strategy type BuildPlanStrategy, index 3) ---> Microsoft.Practices.ObjectBuilder2.BuildFailedException: The current build operation (build key Build Key[Photo.DAL.Concrete.SQLDataContext, null]) failed: Value cannot be null. Parameter name: stream (Strategy type BuildPlanStrategy, index 3) ---> System.ArgumentNullException: Value cannot be null. Parameter name: stream at System.Data.Linq.Mapping.XmlMappingSource.FromStream(Stream stream) at Photo.DAL.Mapping.GetMapping() in C:\Users\Savvas\Documents\Visual Studio 2008\Projects\Photo\Photo.DAL\Mapping.cs:line 18 at Photo.DAL.Concrete.SQLDataContext..ctor(String connectionString) in C:\Users\Savvas\Documents\Visual Studio 2008\Projects\Photo\Photo.DAL\Concrete\SQLDataContext.cs:line 52 at BuildUp_Photo.DAL.Concrete.SQLDataContext(IBuilderContext ) at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context) at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context) at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) --- End of inner exception stack trace --- at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) at Microsoft.Practices.ObjectBuilder2.Builder.BuildUp(IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, Object buildKey, Object existing) at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name) --- End of inner exception stack trace --- at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name) at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name) at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name) at Microsoft.Practices.Unity.UnityContainerBase.Resolve(Type t) at Microsoft.Practices.Unity.UnityContainerBase.ResolveT at Photo.Desktop.Bootstrapper.ConfigureContainer() in C:\Users\Savvas\Documents\Visual Studio 2008\Projects\Photo\Photo.Desktop\Bootstrapper.cs:line 42

I noticed that the error is not coming from actually resolving the class, but from the calling method GetMapping() which is defined as

public static class Mapping
    {
        public static XmlMappingSource GetMapping()
        {
            XmlMappingSource mapping;
            using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Photo.DAL.Entities.Entities.map"))
            {
                mapping = XmlMappingSource.FromStream(stream);
            }
            return mapping;
        }
    }

Is Unity incapable of doing this? (it worked well with Windsor!!)

savvas sopiadis
I don't think Unity is related to this problem. I'd walk through this code and see why stream is coming back null. There is not one bit of unity related code here. I'd wager it is a Fusion (the assembly loading system of .NET) issue. You can read about Fuslogvw.exe on Google for info about debugging assembly loading issues.Also, you are new so you should know that it's generally better form to update your question rather than posting an answer with additional information.
Anderson Imes
You 're absolutely right!!!I found the error: it turns out that i did not define the file "Photo.DAL.Entities.Entities.map" as an embedded resource, thus reflection was not possible!Setting this file to embedded resource solved the problem!
savvas sopiadis
Hey look at that. How about an accepted answer :)
Anderson Imes
Here is comes the acceptation ... :)))
savvas sopiadis

related questions