|
True... Maybe there'd have to be a way to register each assembly with it, so it could crawl each for types. I'm not very familiar with ASP-specific issues, as I generally develop for the desktop, so can't speak to that.
|
|
|
|
|
Ian Shlasko wrote: I generally develop for the desktop
I mostly do Windows Services and batch processing so time spent in application start-up initialization isn't generally a concern.
My understanding of ASP.net pages is that they start and exit very quickly so you don't want to keep initializing a bunch of stuff (especially via Reflection) that takes a lot of time and doesn't even get used. ASP-folk: please correct me if I'm wrong.
I'll have to consider lazy-loading as I ponder this thread further.
|
|
|
|
|
OK, you asked for it... (or maybe you didn't, I don't care, thanks for the challenge anyway)
I now have a lazy-instantiating, generic, enum/attribute-based instance manager with caching.
There is a bunch of Reflection, but it doesn't get performed unless it's requested and then the results are cached for future use.
The main down-side is that Attributes can't be generic and the types of parameters for Attribute constructors is limited.
The result is that you can write a family of business classes and attach instances of them to enumerated values via an Attribute:
public enum DoerRegistry
{
[DoSomethingAttribute( typeof(Yell) , "More, more, more" )]
Rebel
,
[DoSomethingAttribute( typeof(Yell) , "Hey, you" )]
Pink
,
[DoSomethingAttribute( typeof(Whisper) , "Mary" )]
Wind
,
Whatever
}
Ideally, the Attribute could be generic:
[DoSomethingAttribute<Whisper>( "Mary" )]
Another possibility would be if the constructor could accept the instance directly:
[DoSomethingAttribute( new Whisper ( "Mary" ) )]
Although that wouldn't allow for lazy-instantiation.
Yet a third possibility is for the business class to be the Attribute, but I don't think that's a very good design.
You then pass that enumeration to the manager and access the various business class instances with its indexer:
ValueMapManager<DoerRegistry,DoSomethingAttribute,IDoSomething> manager =
new ValueMapManager<DoerRegistry,DoSomethingAttribute,IDoSomething>() ;
manager [ DoerRegistry.Wind ].DoWhatYouDoBest() ;
IDoSomething doer ;
doer = manager [ DoerRegistry.Rebel ] ;
doer.DoWhatYouDoBest() ;
It takes a bit of code to do this, but most of it can be shared among whatever projects/applications require it. The only project-specific code is the classes you need and the enumeration. The interfaces, Attribute, and Manager shouldn't require maintenance.
If this looks like something that you may find useful, let me know and I'll post the code.
|
|
|
|
|
Hi all, I am some graph using zedgraph. I am having problems with any graph labeling Xaxis with 24 hour time.
(i.e am 12, 2,.....12 , 1,2 ,3 .......12 pm)
I am using this site[^]
Basically my question is how to change xaxis label.
thanks
|
|
|
|
|
I don't know the first thing about ZedGraph, however a simple search on the site you provided the link for led to this[^] in 16 seconds. Does that help?
|
|
|
|
|
thaks for your reply, I looked at it but Having some trouble to figure it out. i will look into it more.
thanks
|
|
|
|
|
Hi,
I have created two library (COM) in C# , and i have a interface method as UpdateData() in a component.
Now i need t0 pass a <key ,="" value=""> collection as a parameter in an interface method.
How can i ac chive this.
Can i pass a map object as a parameter in an interface method??
|
|
|
|
|
Are you talking about using a dot net collection parameter in a dot net interace method?
Could you please provide some more details so that the scenario becomes clearer?
There's nothing left in my right brain and nothing right in my left brain. |
modified on Thursday, December 10, 2009 12:40 PM
|
|
|
|
|
ok..
Let say ..
Interface IMyInterface
{
void DisplayData(??????);
}
Class MyClass : IMyInterface
{
void IMyInterface.DisplayData(??????)
{
Logic to display data
Display First Name ,
Display last name...
}
}
///From client.
Class Client
{
//I have a data structure (some data container or .net collection obj) , which saves data in a<< key , value >> format ..
MyClass myclass = new MyClass()
myclass.DisplayData( ???)
}
My question is how can i pass a collection data structure as a parameter in a interface DisplayData() method ??
Can i directly pass a collection object in interface method?? (Please note that this is an interface method and can be used by other languages.)
|
|
|
|
|
Hi all,
I am trying to send a class to a web service but I get error
SoapException was unhandled by user code
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable.
It happens when I call the webservice in the follwoing line
info.sendInformation(createFile);
here is my web method,
[WebMethod]
public void sendInformation(object info)
{
etc.
}
and my code to call it
info createFile = new info();
createFile .Reference = txtReference.Text;
createFile .AccountNo = txtAccountNo.Text;
createFile info = new InfoService ();
info.sendInformation(createFile);
and the class
public class fax : TestPage
{
public string Reference
{
get { return _Reference; }
set { _Reference = value; }
}
public string AccountNo
{
get { return _AccountNo; }
set { _AccountNo = value; }
}
etc.
}
Thanks
|
|
|
|
|
I'm pretty certain that
info createFile = new info();
createFile .Reference = txtReference.Text;
createFile .AccountNo = txtAccountNo.Text;
createFile info = new InfoService ();
info.sendInformation(createFile);
doesn't compile. Can you clarify. And although I stand to be corrected, I'm pretty sure you can't send Object to a web service, it needs definition. Make your service accept an Info object or Fax as it is.
|
|
|
|
|
Sorry I copied it wrong, the following is the correct one and compiles fine
info createFile = new info();
createFile .Reference = txtReference.Text;
createFile .AccountNo = txtAccountNo.Text;
InfoService info = new InfoService ();
info.sendInformation(createFile);
Even if I define the same class in the web service still doesn't work because is different namespace.
Thanks
|
|
|
|
|
Ok. In your web service, define your class. Then accept the type of Fax in your sendInformation method of the WS.
Now, when you consume the web service, a type of Fax will become available. Visual studio creates code files to represent the objects you can pass up so, without you physically defining the file locally, you can;
Fax createFile = new Fax( );
createFile.Reference = txtReference.Text;
createFile.AccountNo = txtAccountNo.Text;
InfoService info = new InfoService( );
info.SendInformation( createFile );
Where your WS method looks like;
[WebMethod]
public void SendInformation( Fax info)
{
}
|
|
|
|
|
Hi,
I want to create an Annotation object inside a foreach loop with different name for it.
Example
foreach(...)
{
Annotation anno_1 = charts[0].CreateAnnotation();
}
How can i create the name of the Annotation foreach item..
example anno_1, anno_2, anno_3..
thanks
|
|
|
|
|
At a stab:
List<Annotation> annotations = new List<Annotation>();
foreach(var chart in charts)
{
Annotations.Add(chart.CreateAnnotation());
}
CCC solved so far: 2 (including a Hard One!)
37!?!! - Randall, Clerks
|
|
|
|
|
Why? How are you going to refer to them again? (without confusing the code with reflection of your running stuff?) Why not just keep them in a list like everyone else?
All those who believe in psycho kinesis, raise my hand.
|
|
|
|
|
Choose a different language. You can do that in DCL[^].
But, seriously, use System.Collections.Generic.List<Annotation> .
|
|
|
|
|
actually this is the code i want to run inside the foreach loop
Annotation aonnotation = m_ChartControl.Charts[0].AnnotationList.CreateAnnotation();
aonnotation.Location.TypeX = LengthType.Bound;
aonnotation.Location.X = 6;
aonnotation.Location.TypeY = LengthType.Bound;
aonnotation.Location.Y = 0;
aonnotation.Data = " ";
aonnotation.Font.Size = 4;
aonnotation.Font.Bold = false;
aonnotation.Color = Color.FromArgb(1, 1, 1);
modulePath = this.GetType().Module.FullyQualifiedName;
moduleDir = Path.GetDirectoryName(modulePath);
aonnotation.ImageFile = Path.Combine(moduleDir, "ArrUp.png");
This code will be create in each loop, but i cannot use the same variable name aonnotation because i need different name to generate annotations onto my chart.
|
|
|
|
|
Could you use an IEnumerable collection here?
There's nothing left in my right brain and nothing right in
my left brain. |
|
|
|
|
|
could you give me a little sample of using IEnumerable in my above code?
thanks
|
|
|
|
|
foreach(...){IEnumerable<annotation> anno = charts[0].CreateAnnotation();}
You can then access each of the annotation objects like an array.
anno[0].<property> = "...." etc.
There's nothing left in my right brain and nothing right in my left brain. |
|
|
|
|
|
hmm i get this error
Error 21 Cannot implicitly convert type 'Manco.Chart.CF.Layout.Annotation' to 'System.Collections.IEnumerable'. An explicit conversion exists (are you missing a cast?)
I tried doing this also cant work
IEnumberable<annotations> anno = m_ChartControl.Charts[0].AnnotationList.CreateAnnotation();
|
|
|
|
|
Apologies. This may work.
IEnumerable<Annotation> anno;<br />
foreach(...){ anno.Add(charts[0].CreateAnnotation());}
You can then access each of the annotation objects like an array.
anno[0]. = "...." etc
There's nothing left in my right brain and nothing right in my left brain. |
|
|
|
|
|
hmm
now i get this error
Error 21 'System.Collections.Generic.IEnumerable<Manco.Chart.CF.Layout.Annotation>' does not contain a definition for 'Add' and no extension method 'Add' accepting a first argument of type 'System.Collections.Generic.IEnumerable<Manco.Chart.CF.Layout.Annotation>' could be found (are you missing a using directive or an assembly reference?)
|
|
|
|
|
of course that should work. and so would a List<Annotation> as has been said earlier. I suggest you read up on the List class and some generic stuff, it is really powerful, and you can use it as an array (and more).
|
|
|
|